谁有c语音c语言简单小游戏代码的代码,谢谢

2048小游戏C语言实现代码
转载 & & 作者:Little_Sword
这篇文章主要为大家详细介绍了2048小游戏C语言实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了C语言实现2048游戏的具体代码,供大家参考,具体内容如下
大一时学c语言写的,写的不好但当时感觉还行。
环境运行 vc6.0 ,cpp文件。
基本上是c写的,但是改变字体颜色,在控制台移动光标等等好像不是c中的。
#include&time.h&
#include&stdlib.h&
#include&conio.h&
#include&stdio.h&
#include&windows.h&
#define x0 26
#define y0 1
HANDLE hOutput=GetStdHandle(STD_OUTPUT_HANDLE);
/*显示声明*/
void p(int*a,int i,int x,int y);
/*部分刷新声明*/
void shua(void);
/*胜利画面测试函数声明*/
int test(void);
/*字体空格声明*/
void kg(int*a);
/*画长条函数的声明*/
void ct(int x,int y,int l,int k,int c);
/*标题字幕2048*/
void p2048(int x,int y);
/*单个颜色返回值声明*/
int col(int*a);
/*移动光标*/
void gotoxy(int x,int y)
COORD coordScreen={0,0};
coordScreen.X=x;
coordScreen.Y=y;
SetConsoleCursorPosition(hOutput,coordScreen);
/*字体颜色*/
void textcolor(int color)
SetConsoleTextAttribute(hOutput,color);
/*显示函数*/
void prin(int*a,int*score,int*scoremax)
for (i = 0; i & 16; i++)
p(a,i,x0,y0);
printf("\n\n
MAXscore=%d
\n", *score, *scoremax);
/* 产生随机数 */
int shu(void)
int s = 0;
s = 1 + (int)(12.0 * rand() / (RAND_MAX + 1.0));
if (s == 12)
/* 决定位置 */
int rands(void)
return (int)(16.0 * rand() / (RAND_MAX + 1.0));
/* 主函数*/
int main(void)
int flag = 0, c = 0, pd = 1, n = 0, i = 0, m = 0, j =
0, sj, sj1, sj2, a[16] = { 0 }, b[16] ={0}, x = 0, score = 0, t = 0, jx = 0, scoremax = 0,ks=1,yx=0;
//开始画面
textcolor(255);
gotoxy(35,15);
an=getch();
switch(an)
case '\r':
gotoxy(35,15);
gotoxy(34,18);
if(ks==1&&yx==1)
else if(ks==0&&yx==1)
textcolor(240);
gotoxy(0,0);
for(i=0;i&=500;i++)
gotoxy(0,0);
ct(12,5,58,10,223);
gotoxy(13,6);
2048游戏说明");
gotoxy(13,8);
printf(" 通过按数字键移动数字,合并相同的数字来的取得更大的数。");
gotoxy(13,9);
printf(" 得到2048时游戏即胜利,当然您也可以选择继续挑战。");
gotoxy(13,11);
printf(" 按键操作:");
gotoxy(13,13);
printf(" 上:↑ 下:↓ 左:← 右:→ 重新开始:r
退出游戏:e");
textcolor(240);
printf("\n\n\n\n\n
I know ");
textcolor(255);
gotoxy(34,18);
//隐藏光标
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO
GetConsoleCursorInfo(hOut,&cci);
cci.bVisible=FALSE;
SetConsoleCursorInfo(hOut,&cci);
//刷新画面
textcolor(240);
gotoxy(0,0);
for(i=0;i&=500;i++)
gotoxy(0,0);
/*设置时间种子*/
srand((int)time(0));
/* 设置初始值 */
sj = rands();
sj1 = rands();
sj2 = rands();
if (sj == sj1 || sj == sj2 || sj1 == sj2)
sj1 = rands();
sj2 = rands();
a[sj] = shu();
a[sj1] = shu();
a[sj2] = shu();
prin(a,&score,&scoremax);
/* 无回显输入 */
sr = getch();
/* scanf("%d",&n); *//* 记录之前的位置,将用以比较移动是否有效 */
for (j = 0; j & 16; j++)
b[j] = a[j];
switch (sr)
/* 向上移动 */
/* 全部移到上边 */
for (j = 0; j & 4; j++)
for (c = 0; c & 3; c++)
if (a[j] == 0)
a[j] = a[j + 4];
a[j + 4] = 0;
if (a[j + 4] == 0)
a[j + 4] = a[j + 8];
a[j + 8] = 0;
if (a[j + 8] == 0)
a[j + 8] = a[j + 12];
a[j + 12] = 0;
/* 移到上面后的合并操作 */
if (a[j] == a[j + 4])
a[j] = a[j] * 2;
score = score + a[j];
a[j + 4] = a[j + 8];
a[j + 8] = a[j + 12];
a[j + 12] = 0;
if (a[j + 4] == a[j + 8])
a[j + 4] = 2 * a[j + 4];
score = score + a[j + 4];
a[j + 8] = 0;
else if (a[j + 4] == a[j + 8])
a[j + 4] = 2 * a[j + 4];
score = score + a[j + 4];
a[j + 8] = a[j + 12];
a[j + 12] = 0;
else if (a[j + 8] == a[j + 12])
a[j + 8] = 2 * a[j + 8];
score = score + a[j + 8];
a[j + 12] = 0;
/* 向下移动 */
/* 全部移动到下面 */
for (j = 12; j & 16; j++)
for (c = 0; c & 3; c++)
if (a[j] == 0)
a[j] = a[j - 4];
a[j - 4] = 0;
if (a[j - 4] == 0)
a[j - 4] = a[j - 8];
a[j - 8] = 0;
if (a[j - 8] == 0)
a[j - 8] = a[j - 12];
a[j - 12] = 0;
/* 移到下面后的合并操作 */
if (a[j] == a[j - 4])
a[j] = a[j] * 2;
score = score + a[j];
a[j - 4] = a[j - 8];
a[j - 8] = a[j - 12];
a[j - 12] = 0;
if (a[j - 4] == a[j - 8])
a[j - 4] = 2 * a[j - 4];
score = score + a[j - 4];
a[j - 8] = 0;
else if (a[j - 4] == a[j - 8])
a[j - 4] = 2 * a[j - 4];
score = score + a[j - 4];
a[j - 8] = a[j - 12];
a[j - 12] = 0;
else if (a[j - 8] == a[j - 12])
a[j - 8] = 2 * a[j - 8];
score = score + a[j - 8];
a[j - 12] = 0;
/* 向左移动 */
/* 全部移动到左面 */
for (j = 0; j &= 12; j = j + 4)
for (c = 0; c & 3; c++)
if (a[j] == 0)
a[j] = a[j + 1];
a[j + 1] = 0;
if (a[j + 1] == 0)
a[j + 1] = a[j + 2];
a[j + 2] = 0;
if (a[j + 2] == 0)
a[j + 2] = a[j + 3];
a[j + 3] = 0;
/* 移到左面后的合并操作 */
if (a[j] == a[j + 1])
a[j] = a[j] * 2;
score = score + a[j];
a[j + 1] = a[j + 2];
a[j + 2] = a[j + 3];
a[j + 3] = 0;
if (a[j + 1] == a[j + 2])
a[j + 1] = 2 * a[j + 1];
score = score + a[j + 1];
a[j + 2] = 0;
else if (a[j + 1] == a[j + 2])
a[j + 1] = 2 * a[j + 1];
score = score + a[j + 1];
a[j + 2] = a[j + 3];
a[j + 3] = 0;
else if (a[j + 2] == a[j + 3])
a[j + 2] = 2 * a[j + 2];
score = score + a[j + 2];
a[j + 3] = 0;
/* 向右移动 */
/* 全部移动到右面 */
for (j = 3; j &= 16; j = j + 4)
for (c = 0; c & 3; c++)
if (a[j] == 0)
a[j] = a[j - 1];
a[j - 1] = 0;
if (a[j - 1] == 0)
a[j - 1] = a[j - 2];
a[j - 2] = 0;
if (a[j - 2] == 0)
a[j - 2] = a[j - 3];
a[j - 3] = 0;
/* 移到右面后的合并操作 */
if (a[j] == a[j - 1])
a[j] = a[j] * 2;
score = score + a[j];
a[j - 1] = a[j - 2];
a[j - 2] = a[j - 3];
a[j - 3] = 0;
if (a[j - 1] == a[j - 2])
a[j - 1] = 2 * a[j - 1];
score = score + a[j - 1];
a[j - 2] = 0;
else if (a[j - 1] == a[j - 2])
a[j - 1] = 2 * a[j - 1];
score = score + a[j - 1];
a[j - 2] = a[j - 3];
a[j - 3] = 0;
else if (a[j - 2] == a[j - 3])
a[j - 2] = 2 * a[j - 2];
score = score + a[j - 2];
a[j - 3] = 0;
/* 重新开始 */
for (j = 0; j & 16; j++)
sj1 = rands();
sj2 = rands();
if (sj1 == sj2)
sj1 = rands();
sj2 = rands();
a[sj1] = shu();
a[sj2] = shu();
score = 0;
/* 退出 */
ct(32,19,15,3,207);
printf(" 游戏已退出!");
textcolor(255);
gotoxy(0,0);
/* 其他情况(刷新) */
/*windows下的系统清屏函数*/
//system ("cls");
/* 判断最高分 */
if (score & scoremax)
scoremax =
/* 判断是否胜利(是否含有2048) */
for (j = 0; j & 16; j++)
if (a[j] == 2048 && jx == 0)
/* 胜利时输出游戏结果 */
prin(a,&score,&scoremax);
ct(20,19,15,3,207);
printf(" 游戏胜利!");
textcolor(159);
gotoxy(38,19);
printf(" Continue
textcolor(239);
gotoxy(49,20);
textcolor(175);
gotoxy(49,21);
an=getch();
switch(an)
textcolor(240);
gotoxy(36,21);
textcolor(175);
gotoxy(38,21);
printf(" Exit
textcolor(240);
gotoxy(36,19);
textcolor(159);
gotoxy(47,19);
Continue ");
textcolor(240);
gotoxy(36,20);
textcolor(239);
gotoxy(49,20);
else if(t==1)
textcolor(240);
gotoxy(36,19);
textcolor(159);
gotoxy(38,19);
printf(" Continue
textcolor(240);
gotoxy(36,20);
textcolor(239);
gotoxy(47,20);
textcolor(240);
gotoxy(36,21);
textcolor(175);
gotoxy(49,21);
textcolor(240);
gotoxy(36,20);
textcolor(239);
gotoxy(38,20);
printf(" Restart
textcolor(240);
gotoxy(36,21);
textcolor(175);
gotoxy(47,21);
textcolor(240);
gotoxy(36,19);
textcolor(159);
gotoxy(49,19);
Continue ");
textcolor(240);
gotoxy(36,20);
textcolor(239);
gotoxy(38,20);
printf(" Restart
textcolor(240);
gotoxy(36,19);
textcolor(159);
gotoxy(47,19);
Continue ");
textcolor(240);
gotoxy(36,21);
textcolor(175);
gotoxy(49,21);
else if(t==1)
textcolor(240);
gotoxy(36,21);
textcolor(175);
gotoxy(38,21);
printf(" Exit
textcolor(240);
gotoxy(36,20);
textcolor(239);
gotoxy(47,20);
textcolor(240);
gotoxy(36,19);
textcolor(159);
gotoxy(49,19);
Continue ");
textcolor(240);
gotoxy(36,19);
textcolor(159);
gotoxy(38,19);
printf(" Continue
textcolor(240);
gotoxy(36,21);
textcolor(175);
gotoxy(47,21);
textcolor(240);
gotoxy(36,20);
textcolor(239);
gotoxy(49,20);
case '\r':
textcolor(255);
gotoxy(0,0);
/* 重新开始游戏 */
if (t == 1)
for (j = 0; j & 16; j++)
sj1 = rands();
sj2 = rands();
if (sj1 == sj2)
sj1 = rands();
sj2 = rands();
a[sj1] = shu();
a[sj2] = shu();
for (j = 0; j & 16; j++)
b[j] = a[j];
score = 0;
/* 继续游戏 */
else if (t == 2)
ct(32,19,15,3,207);
printf(" 游戏已退出!");
textcolor(255);
gotoxy(0,0);
/* 决定是否产生新的数及其位置以及游戏是否失败 */
/* flag,pd,x赋初值 */
/* 判断移动后是否有空位:pd=0为有空位,pd=1为无空位 */
for (j = 0; j & 16; j++)
if (a[j] == 0)
/* 移动是否有效:x=1有效,x=0无效 */
for (j = 0; j & 16; j++)
if (a[j] != b[j])
/* 移动有效时且有空位时产生新数 */
if (pd == 0 && x == 1)
sj = rands();
if (a[sj] == 0)
a[sj] = shu();
/* 游戏是否失败的判定 */
/* 移动后无空位 */
else if (pd != 0)
/* 判断是否还有可合并的项 */
for (j = 0; j & 16; j++)
if (j != 3 && j != 7 && j != 11 && j != 15 && a[j] == a[j + 1])
flag = flag + 1;
if (j != 12 && j != 13 && j != 14 && j != 15
&& a[j] == a[j + 4])
flag = flag + 1;
if (j != 0 && j != 4 && j != 8 && j != 12 && a[j] == a[j - 1])
flag = flag + 1;
if (j != 0 && j != 1 && j != 2 && j != 3 && a[j] == a[j - 4])
flag = flag + 1;
/* 无空位且没有可合并的项时游戏失败 */
if (flag == 0)
/* 失败时输出游戏结果 */
prin(a,&score,&scoremax);
ct(20,19,15,3,271);
printf(" 游戏结束!");
textcolor(240);
gotoxy(38,19);
printf("Whether continue the game ?");
gotoxy(44,21);
printf("@Yes
gotoxy(44,21);
an=getch();
switch(an)
gotoxy(53,21);
printf("@");
gotoxy(44,21);
printf(" ");
gotoxy(44,21);
printf("@");
gotoxy(53,21);
printf(" ");
gotoxy(53,21);
printf("@");
gotoxy(44,21);
printf(" ");
gotoxy(44,21);
printf("@");
gotoxy(53,21);
printf(" ");
case '\r':
textcolor(255);
gotoxy(0,0);
if (t == 1)
for (j = 0; j & 16; j++)
sj=rands();
sj1 = rands();
sj2 = rands();
if (sj1 ==sj2||sj1==sj||sj2==sj)
sj1 = rands();
sj2 = rands();
a[sj]=shu();
a[sj1] = shu();
a[sj2] = shu();
score = 0;
ct(32,19,15,3,207);
printf(" 游戏已退出!");
textcolor(255);
gotoxy(0,0);
/* 显示结果 */
prin(a,&score,&scoremax);
/*显示函数*/
void p(int*a,int i,int x,int y)
int x1=x,y1=y;
textcolor(col(a+i));
x1=x+(i%4)*7;
y1=y+(i/4)*4;
gotoxy(x1,y1);
gotoxy(x1,y1+1);
gotoxy(x1,y1+2);
textcolor(240);
/*字体空格声明*/
void kg(int*a)
else if(*a&10)
printf(" %d ",*a);
else if(*a&100)
printf(" %d ",*a);
else if(*a&1000)
printf(" %d ",*a);
else if(*a&10000)
printf("%d ",*a);
printf("%d",*a);
/*单个颜色返回值*/
int col(int*a)
int co=127;
if(*(a)==0)
else if(*(a)==2)
else if(*(a)==4)
else if(*(a)==8)
else if(*(a)==16)
else if(*(a)==32)
else if(*(a)==64)
else if(*(a)==128)
else if(*(a)==256)
else if(*(a)==512)
else if(*(a)==1024)
else if(*(a)==2048)
else if(*(a)==4096)
/*标题字幕2048*/
void p2048(int x,int y)
textcolor(240);
gotoxy(0,0);
for(i=0;i&=500;i++)
textcolor(207);
gotoxy(x,y);
gotoxy(x,y+1);
gotoxy(x+7,y+2);
gotoxy(x+7,y+3);
gotoxy(x,y+4);
gotoxy(x,y+5);
gotoxy(x,y+6);
gotoxy(x,y+7);
gotoxy(x,y+8);
gotoxy(x,y+9);
textcolor(239);
gotoxy(x+13,y);
gotoxy(x+13,y+1);
gotoxy(x+13,y+2);
gotoxy(x+13+7,y+2);
gotoxy(x+13,y+3);
gotoxy(x+13+7,y+3);
gotoxy(x+13,y+4);
gotoxy(x+13+7,y+4);
gotoxy(x+13,y+5);
gotoxy(x+13+7,y+5);
gotoxy(x+13,y+6);
gotoxy(x+13+7,y+6);
gotoxy(x+13,y+7);
gotoxy(x+13+7,y+7);
gotoxy(x+13,y+8);
gotoxy(x+13,y+9);
textcolor(159);
gotoxy(x+26,y);
gotoxy(x+26+7,y);
gotoxy(x+26,y+1);
gotoxy(x+26+7,y+1);
gotoxy(x+26,y+2);
gotoxy(x+26+7,y+2);
gotoxy(x+26,y+3);
gotoxy(x+26+7,y+3);
gotoxy(x+26,y+4);
gotoxy(x+26,y+5);
gotoxy(x+26,y+6);
gotoxy(x+26,y+7);
gotoxy(x+26,y+8);
gotoxy(x+26,y+9);
textcolor(175);
for(i=0;i&10;i++)
gotoxy(x+39,y+i);
textcolor(240);
gotoxy(x+42,y+2);
gotoxy(x+42,y+3);
gotoxy(x+42,y+6);
gotoxy(x+42,y+7);
ct(35,15,20,1,240);
printf(" Game Sart");
ct(35,18,20,1,240);
printf("How to play");
printf("\n");
printf("\n\n\n
Made by Mr Yan");
gotoxy(35-25,15);
textcolor(255);
gotoxy(0,0);
/*画长条函数*/
void ct(int x,int y,int l,int k,int c)
int i=0,j=0;
textcolor(c);
gotoxy(x,y);
for(i=0;i&k;i++)
gotoxy(x,y+i);
for(j=0;j&l;j++)
printf(" ");
gotoxy(x+1,y+k/2);
void shua(void)
gotoxy(0,18);
textcolor(255);
gotoxy(0,0);
/*胜利画面测试函数*/
int test(void)
textcolor(240);
gotoxy(0,0);
for(i=0;i&=500;i++)
gotoxy(0,0);
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO
GetConsoleCursorInfo(hOut,&cci);
cci.bVisible=FALSE;
SetConsoleCursorInfo(hOut,&cci);
//printf("\n游戏胜利!t\n重新开始游戏请按1\n继续游戏请按2\n退出请按其他键3\n");
继续选中 textcolor(240);
gotoxy(36,19);
textcolor(159);
gotoxy(38,19);
printf(" Continue
继续平常 textcolor(240);
gotoxy(36,19);
textcolor(159);
gotoxy(49,19);
Continue ");
1 重新选中 textcolor(240);
gotoxy(36,20);
textcolor(239);
gotoxy(38,20);
printf(" Restart
重新平常 textcolor(240);
gotoxy(36,20);
textcolor(239);
gotoxy(49,20);
退出选中 textcolor(240);
gotoxy(36,21);
textcolor(175);
gotoxy(38,21);
printf(" Exit
退出平常 textcolor(240);
gotoxy(36,21);
textcolor(175);
gotoxy(49,21);
ct(20,19,15,3,207);
printf(" 游戏胜利!");
textcolor(159);
gotoxy(38,19);
printf(" Continue
textcolor(239);
gotoxy(49,20);
textcolor(175);
gotoxy(49,21);
an=getch();
switch(an)
textcolor(240);
gotoxy(36,21);
textcolor(175);
gotoxy(38,21);
printf(" Exit
textcolor(240);
gotoxy(36,19);
textcolor(159);
gotoxy(47,19);
Continue ");
textcolor(240);
gotoxy(36,20);
textcolor(239);
gotoxy(49,20);
else if(t==1)
textcolor(240);
gotoxy(36,19);
textcolor(159);
gotoxy(38,19);
printf(" Continue
textcolor(240);
gotoxy(36,20);
textcolor(239);
gotoxy(47,20);
textcolor(240);
gotoxy(36,21);
textcolor(175);
gotoxy(49,21);
textcolor(240);
gotoxy(36,20);
textcolor(239);
gotoxy(38,20);
printf(" Restart
textcolor(240);
gotoxy(36,21);
textcolor(175);
gotoxy(47,21);
textcolor(240);
gotoxy(36,19);
textcolor(159);
gotoxy(49,19);
Continue ");
textcolor(240);
gotoxy(36,20);
textcolor(239);
gotoxy(38,20);
printf(" Restart
textcolor(240);
gotoxy(36,19);
textcolor(159);
gotoxy(47,19);
Continue ");
textcolor(240);
gotoxy(36,21);
textcolor(175);
gotoxy(49,21);
else if(t==1)
textcolor(240);
gotoxy(36,21);
textcolor(175);
gotoxy(38,21);
printf(" Exit
textcolor(240);
gotoxy(36,20);
textcolor(239);
gotoxy(47,20);
textcolor(240);
gotoxy(36,19);
textcolor(159);
gotoxy(49,19);
Continue ");
textcolor(240);
gotoxy(36,19);
textcolor(159);
gotoxy(38,19);
printf(" Continue
textcolor(240);
gotoxy(36,21);
textcolor(175);
gotoxy(47,21);
textcolor(240);
gotoxy(36,20);
textcolor(239);
gotoxy(49,20);
case '\r':
textcolor(255);
gotoxy(0,0);
textcolor(240);
printf("Continue
else if(t==1)
printf("Restart
printf("Exit
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具当前位置:
&c语言小游戏代码,二级c语言
c语言小游戏代码,二级c语言
作者 koko626
如果您觉得还不错,给个好评哦
顶一下,感谢分享!
顶一下,感谢分享!
顶一下,感谢分享!
mark一下,早上过来下载,谢谢楼主分享
顶一下,感谢分享!
顶一下,感谢分享!
顶一下,感谢分享
24小时热帖
下载小木虫APP
与700万科研达人随时交流C语言 小游戏之贪吃蛇 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 21时,
C语言编写的一个简单的贪吃蛇游戏,原理很简单,挺有意思的!&&&&&today,&start&to&play&os!
代码片段(2)
1.&[代码]C语言 贪吃蛇游戏&&&&
//*******************************************************
//*******************************************************
//******友情提示:如想速度快点,请改小_sleep(500)函数中参数*****
//*******************************************************
//*******************如写的不好,请见谅*********************
//*******************************************************
#include &stdio.h&
#include &stdlib.h&
#include &conio.h&
#include &string.h&
#include &time.h&
const int H = 8;
//地图的高
const int L = 16;
//地图的长
char GameMap[H][L];
//游戏地图
//按键保存
sum = 1, over = 0;
//蛇的长度, 游戏结束(自吃或碰墙)
dx[4] = {0, 0, -1, 1};
//左、右、上、下的方向
dy[4] = {-1, 1, 0, 0};
struct Snake
//蛇的每个节点的数据类型
//左边位置
//保存当前节点的方向, 0,1,2,3分别为左右上下
}Snake[H*L];
const char Shead = '@';
const char Sbody = '#';
const char Sfood = '*';
const char Snode = '.';
//'.'在地图上标示为空
void Initial();
//地图的初始化
void Create_Food(); //在地图上随机产生食物
void Show();
//刷新显示地图
void Button();
//取出按键,并判断方向
void Move();
//蛇的移动
void Check_Border();
//检查蛇头是否越界
void Check_Head(int x, int y);
//检查蛇头移动后的位置情况
int main()
Initial();
void Initial()
//地图的初始化
system("title 贪吃蛇");
//控制台的标题
memset(GameMap, '.', sizeof(GameMap));
//初始化地图全部为空'.'
system("cls");
srand(time(0));
//随机种子
hx = rand()%H;
//产生蛇头
hy = rand()%L;
GameMap[hx][hy] = S
Snake[0].x =
Snake[0].y =
Snake[0].now = -1;
Create_Food();
//随机产生食物
for(i = 0; i & H; i++)
//地图显示
for(j = 0; j & L; j++)
printf("%c", GameMap[i][j]);
printf("\n");
printf("\n小小C语言贪吃蛇\n");
printf("按任意方向键开始游戏\n");
//先接受一个按键,使蛇开始往该方向走
//取出按键,并判断方向
void Create_Food()
//在地图上随机产生食物
fx = rand()%H;
fy = rand()%L;
if(GameMap[fx][fy] == '.')
//不能出现在蛇所占有的位置
GameMap[fx][fy] = S
void Show()
//刷新显示地图
_sleep(500); //延迟半秒(1000为1s),即每半秒刷新一次地图
//先判断按键在移动
//自吃或碰墙即游戏结束
printf("\n**游戏结束**\n");
getchar();
system("cls");
//清空地图再显示刷新吼的地图
for(i = 0; i & H; i++)
for(j = 0; j & L; j++)
printf("%c", GameMap[i][j]);
printf("\n");
printf("\n小小C语言贪吃蛇\n");
printf("按任意方向键开始游戏\n");
void Button()
//取出按键,并判断方向
if(kbhit() != 0) //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0
while(kbhit() != 0)
//可能存在多个按键,要全部取完,以最后一个为主
key = getch(); //将按键从控制台中取出并保存到key中
switch(key)
Snake[0].now = 0;
Snake[0].now = 1;
Snake[0].now = 2;
Snake[0].now = 3;
void Move()
//蛇的移动
//保存当前蛇的长度
//记录当前蛇头的位置,并设置为空,蛇头先移动
x = Snake[0].x;
y = Snake[0].y;
GameMap[x][y] = '.';
Snake[0].x = Snake[0].x + dx[ Snake[0].now ];
Snake[0].y = Snake[0].y + dy[ Snake[0].now ];
Check_Border();
//蛇头是否越界
Check_Head(x, y);
//蛇头移动后的位置情况,参数为: 蛇头的开始位置
if(sum == t)
//未吃到食物即蛇身移动哦
for(i = 1; i & i++)
//要从蛇尾节点向前移动哦,前一个节点作为参照
if(i == 1)
//尾节点设置为空再移动
GameMap[ Snake[i].x ][ Snake[i].y ] = '.';
if(i == sum-1)
//为蛇头后面的蛇身节点,特殊处理
Snake[i].x =
Snake[i].y =
Snake[i].now = Snake[0].
//其他蛇身即走到前一个蛇身位置
Snake[i].x = Snake[i+1].x;
Snake[i].y = Snake[i+1].y;
Snake[i].now = Snake[i+1].
GameMap[ Snake[i].x ][ Snake[i].y ] = '#'; //移动后要置为'#'蛇身
void Check_Border()
//检查蛇头是否越界
if(Snake[0].x & 0 || Snake[0].x &= H
|| Snake[0].y & 0 || Snake[0].y &= L)
void Check_Head(int x, int y)
//检查蛇头移动后的位置情况
if(GameMap[ Snake[0].x ][ Snake[0].y ] == '.')
GameMap[ Snake[0].x ][ Snake[0].y ] = '@';
if(GameMap[ Snake[0].x ][ Snake[0].y ] == '*')
GameMap[ Snake[0].x ][ Snake[0].y ] = '@';
Snake[sum].x =
//新增加的蛇身为蛇头后面的那个
Snake[sum].y =
Snake[sum].now = Snake[0].
GameMap[ Snake[sum].x ][ Snake[sum].y ] = '#';
Create_Food();
//食物吃完了马上再产生一个食物
2.&[图片] 0_gGb.gif&&&&
开源中国-程序员在线工具:
相关的代码(2869)
3回/3869阅
0回/1099阅
3回/1646阅
0回/1425阅
E:\desktop&gcc snake.c -o snake
snake.c:14:6: error: variably modified 'GameMap' at file scope
snake.c:14:6: error: variably modified 'GameMap' at file scope
snake.c:23:2: error: variably modified 'Snake' at file scope
snake.c: In function 'Show':
snake.c:88:3: warning: '_sleep' is deprecated (declared at e:\e
2楼:wuqinfei 发表于
这可如何是好
3楼:Pluser 发表于
引用来自“wuqinfei”的评论这可如何是好I can run it by vc6.0 and vs2010
4楼:海里没泡泡 发表于
可以在vc6.0上运行啊,不过楼主用的是什么编译器,求解
5楼:pqiankui 发表于
conio库仅适用于 Windows 平台
6楼:混沌路人 发表于
不能反方向运行。
一般都会把反方向视作无效。
7楼:Pluser 发表于
引用来自“海里没泡泡”的评论可以在vc6.0上运行啊,不过楼主用的是什么编译器,求解VC6.0 + VS2010
8楼:Pluser 发表于
引用来自“混沌路人”的评论不能反方向运行。
一般都会把反方向视作无效。是的 我当初就是这样设置的,如果视为无效 可简单设置就OK了
9楼:go明骚暗贱 发表于
是啥意思,求解
10楼:GM563536 发表于
引用来自“go明骚暗贱”的评论case 75:
是啥意思,求解是ascll码值,
11楼:go明骚暗贱 发表于
引用来自“go明骚暗贱”的评论case 75:
是啥意思,求解引用来自“GM563536”的评论是ascll码值,通过H K M P 来实现上下左右的操作吗?
12楼:Carzy_x 发表于
cannot allocate an array of constant size 0 怎么回事啊 vc6.0& .c文件
13楼:那只撞地球的猪 发表于
大神还在吗 来的有点晚。我看不明白 &如果Snake[0]是蛇头的话 在移动的时候 为什么Snake[1]会变成蛇尾,而Snake[sum-1]却变成了紧跟着蛇头
14楼:那只撞地球的猪 发表于
大神还在吗 来的有点晚。我看不明白 &如果Snake[0]是蛇头的话 在移动的时候 为什么Snake[1]会变成蛇尾,而Snake[sum-1]却变成了紧跟着蛇头
15楼:IT技术学习者 发表于
if(sum == t)&//未吃到食物即蛇身移动哦&
&&&&for(i = 1; i & i++)&//要从蛇尾节点向前移动哦,前一个节点作为参照&
&如果未吃到食物&&&这个for循环不能执行啊&&& 求大神解释一下
开源从代码分享开始
Pluser的其它代码

我要回帖

更多关于 c 小游戏源代码 的文章

 

随机推荐