C语言作为一种基础的编程语言,在游戏开发方面也有着广泛的应用。本文将为大家收集整理各种C语言游戏代码,并希望能够帮助到各位想要学习游戏编程的开发者。
1. 推箱子
推箱子是一款经典的益智游戏,《推箱子》是一个比较经典的例子,这里提供一个C语言实现的经典代码:
```c
#include
int main() {
int map[5][5] = {
{1,1,1,1,1},
{1,0,0,0,1},
{1,0,2,0,1},
{1,0,0,0,1},
{1,1,1,1,1}
};
int x = 1, y = 1, i;
char ch;
while(1) {
system("cls");
for(i = 0;i < 5;i ++) {
int j;
for(j = 0;j < 5;j ++) {
if(map[i][j] == 1) printf("##");
else if(map[i][j] == 2) printf("@@");
else if(i == y && j == x)printf("%% ");
else printf(" ");
}
printf("\n");
}
int wins = 1;
for(i = 0;i < 5;i ++)
for(int j = 0;j < 5;j ++)
if(map[i][j] == 2) wins = 0;
if(wins) {
printf("You WIN!!!\n");
break;
}
ch = getch();
if(ch == 'w' && map[y - 1][x] != 1) y --;
if(ch == 's' && map[y + 1][x] != 1) y ++;
if(ch == 'a' && map[y][x - 1] != 1) x --;
if(ch == 'd' && map[y][x + 1] != 1) x ++;
if(ch == 32) break;
if(ch == 27) return 0;
if(map[y][x] == 2) {
if(ch == 'w' && map[y - 2][x] == 0) {
map[y - 2][x] = 2;
map[y - 1][x] = 0;
map[y][x] = 0;
}
if(ch == 's' && map[y + 2][x] == 0) {
map[y + 2][x] = 2;
map[y + 1][x] = 0;
map[y][x] = 0;
}
if(ch == 'a' && map[y][x - 2] == 0) {
map[y][x - 2] = 2;
map[y][x - 1] = 0;
map[y][x] = 0;
}
if(ch == 'd' && map[y][x + 2] == 0) {
map[y][x + 2] = 2;
map[y][x + 1] = 0;
map[y][x] = 0;
}
}
}
return 0;
}
```
2. 扫雷
扫雷也是一款经典的游戏,《扫雷》是Windows系统内置的一款游戏,以下是一个C语言实现的简单代码模板:
```c
#include
#include
#include
#define HIDE_CURSOR() printf("\033[?25l")
#define SHOW_CURSOR() printf("\033[?25h")
void gotoxy(int x, int y){printf("\033[%d;%dH", (x), (y));}
void settextcolor(unsigned short ForeColor, unsigned short BackGroundColor){printf("\033[0m\033[%d;%d;%dm", ForeColor > 7, ForeColor % 8, BackGroundColor % 8);}
int x, y, xy[32][32], len = 10, dx[8] = {0, -1, -1, -1, 0, 1, 1, 1}, dy[8] = {1, 1, 0, -1, -1, -1, 0, 1};
void dfs(int i, int j){
if(i < 0 || i >= len || j < 0 || j >= len) return;
if(xy[i][j] != -1) return;
int sum = 0;
for(int k = 0;k < 8;k ++) if(i + dx[k] >= 0 && i + dx[k] < len && j + dy[k] >= 0 && j + dy[k] < len) sum += xy[i + dx[k]][j + dy[k]] == -1;
settextcolor(0, 15);
gotoxy(i * 2 + 1, j + 1);
printf("%d", sum);
xy[i][j] = sum;
if(sum) return;
for(int k = 0;k < 8;k ++) dfs(i + dx[k], j + dy[k]);
}
int main(){
srand((unsigned int)time(0));
HIDE_CURSOR();
for(int i = 0;i < len;i ++)
for(int j = 0;j < len;j ++)
xy[i][j] = rand() % 6 ? -1 : 0;
while(1){
for(int i = 0;i < len;i ++)
for(int j = 0;j < len;j ++){
settextcolor(15, xy[i][j] >= 0 ? 10 : 4);
gotoxy(i * 2 + 1, j + 1);
printf("%c", xy[i][j] >= 0 ? !xy[i][j] ? '-' : 'o' : '*');
}
SHOW_CURSOR();
getchar();
HIDE_CURSOR();
gotoxy(x * 2 + 1, y + 1);
printf("%c", xy[x][y] == -1 ? 'x' : xy[x][y] ? xy[x][y] + '0' : '-');
if(xy[x][y] == -1){
gotoxy(40, 8);
printf("LOST!!!");
gotoxy(40, 10);
break;
}
dfs(x, y);
int win = 1;
for(int i = 0;i < len;i ++)
for(int j = 0;j < len;j ++) if(xy[i][j] == -1) win = 0;
if(win){
gotoxy(40, 8);
printf("WIN!!!");
gotoxy(40, 10);
break;
}
}
settextcolor(15, 0);
return 0;
}
```
3. 接球
接球是一款简单的小游戏,本部分将提供一个C语言实现的接球游戏代码。
```c
#include
#include
#include
#define SIZY 14
int xx = 50, xxb, xxa, xvtc = 1, dx = 1, dy = 1, x_cor, sc = 0, tmpx, tmpy, rast, u_rast;
char save[SIZY][20], tmps[20], chn, tmpch;
void inp(){
chn = getch();
if(chn == 27) exit(0);
}
void gh(int i, int j, int k){
int ii, jj;
tmpx = (i - 1) * rast; tmpy = (j - 1) * u_rast;
gotoxy(tmpx + tmpy * 80, 0);
if(tmpy % 2 == 1) tmpx += x_cor;
if(k == 0) printf("%c%c \b", 176, 176);
if(k == 1) printf("%c%c \b", 177, 177);
if(k == 2) printf("%c%c \b", 178, 178);
if(k == 3) printf("%c%c \b", 219, 219);
}
void shpil()
{
while(1){
inp();
if(chn == 'a' && xxb >= 3){
strcpy(tmps, save[xxa]);
memset(save[xxa], 0, sizeof(save[xxa]));
xxa--; xxb--;
strcpy(save[xxb], tmps);
}
if(chn == 'd' && xxb <= 77){
strcpy(tmps, save[xxb]);
memset(save[xxb], 0, sizeof(save[xxb]));
xxb++; xxa++;
strcpy(save[xxa], tmps);
}
if(chn == ' ' && !xvtc){
xvtc = 1;
gotoxy(24, 22);
printf("%8s", "");
gotoxy(24, 22);
}
if(xvtc){
gh(dx, dy, 3);
Sleep(60);
gh(dx, dy, 2);
dx += x_cor;
dy += sc == 0 ? 1 : -1;
if(dx == xxb) xvtc = 0;
if(dy == 1 && !sc){if(dx >= (xx - 2) && dx <= (xx + 2)){sc = 1; gotoxy(24, 22); printf("SCORE: %3d", ++sc);}}
if(dy == SIZY){if(dx >= xxa && dx <= xxb){sc = 0; gotoxy(24, 22); printf("%8s", "");}}
if(dx == 59){x_cor = -1; gh(dx, dy, 3);}
if(dx == 21){x_cor = 1; gh(dx, dy, 3);}
if(dx == 3) gh(dx, dy, 0);
if(dx == 77) gh(dx, dy, 1);
}
}
}
void main(){
int i, j, k;
system("cls");
rast = strlen("2 ") * 2; u_rast = strlen("2\n") - 1;
x_cor = -1;
printf(" Game: %3s ", "Catch");
gotoxy(24, 22);
printf("Use A&D Buttons to move.");
for(i = 1;i <= SIZY;i ++) for(j = 1;j <= 76;j ++) save[i][j] = ' ';
xxa = 25; xxb = 55;
for(j = xxa;j <= xxb;j ++) save[13][j] = 178;
gh(dx, dy, 3);
shpil();
}
```
以上三种游戏代码(推箱子、扫雷、接球)提供了C语言实现的代码,用于游戏开发爱好者参考和学习,也可以将其作为编程练习的素材。
如果您对于这些代码存在问题,可以在阅读代码时进行讨论与修改,同时也可以到相关的编程社区寻求帮助,一起探讨游戏编程的魅力。