
正文
贪吃蛇c语言代码暂停函数 c语言贪吃蛇代码及解析
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
请问这个C语言的贪吃蛇如何增加暂停和继续功能?还有,怎么实现保存和读取记录?
贪吃蛇c语言代码暂停函数你贪吃蛇c语言代码暂停函数的程序在哪里?
贪吃蛇c语言代码暂停函数我来说一下我贪吃蛇c语言代码暂停函数的思路吧,仅限于二维的贪吃蛇地图。
首先创建一张地图,地图上的每一个点都可以用一个坐标来表示。
然后给蛇来建模,蛇的属性可以复用地图的属性,就是贪吃蛇c语言代码暂停函数他在地图上占用的坐标。还有额外要保存一个蛇头的位置和蛇的前进方向。
蛇的运动可以用一个定时器来表示,定时器每一次到时都向前进方向增加一个坐标。至于暂停功能,就可以对应于停止定时器,继续功能就是启动定时器。
保存功能就是将蛇的所有属性保存到一个文件中,读取记录就是从文件中读取所有的蛇的属性,再放到地图上就可以了。
不知道我说的是否明白。
相关问答
Q1: 大专考试,C语言贪吃蛇程序编写,
//DEV C++ 通过
/*
program by wlfryq 71693456@qq.com
*/
#include stdio.h
#include stdlib.h
#include conio.h
#include windows.h
#include time.h
#include direct.h
#include stdbool.h
#define W 80 //屏幕宽度
#define H 37 //屏幕高度
#define SNAKE_ALL_LENGTH 200 //蛇身最长为
void CALLBACK TimerProc(
HWND hwnd,
UINT message,
UINT idTimer,
DWORD dwTime);
void start();
struct MYPOINT
{
int x;
int y;
} s[SNAKE_ALL_LENGTH] , head, end, food;
int max_count=0; //历史最高分,如果countmax_count, 则max_count=count
int old_max_count=0; //历史最高分,不会变动, 用于死亡时判断max_count是否大于old_max_count,如果大于,则写入文件
int count=0; //得分
int len=20; //当前蛇身长度
int direct=0; //方向: 0-向右, 1-向下, 2-向左, 3-向上
int speed=200; //速度:毫秒
bool isfood=false; //食物是否存在
int timerID;
bool stop=false; //暂停
char* ini_path; //数据文件绝对路径
void setxy(int x, int y) //设置CMD窗口光标位置
{
COORD coord = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void hide_cursor() //隐藏CMD窗口光标
{
CONSOLE_CURSOR_INFO cci;
cci.bVisible = FALSE;
cci.dwSize = sizeof(cci);
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorInfo(handle, cci);
}
void set_food() //设置食物坐标
{
if(isfood==true)
{
return;
}
int x,y,i;
bool flag=false;
while(1)
{
flag=false;
x=rand()%(W-14)+6;
y=rand()%(H-12)+6;
for(i=0;ilen;i++) //判断食物是否落在蛇身上
{
if(s[i].x==x s[i].y==y)
{
flag=true;
break;
}
}
if(flag==true)
{
continue;
}
else
{
food.x=x;
food.y=y;
break;
}
}
setxy(food.x,food.y);
printf("*");
isfood=true;
}
void check_board() //检测蛇身是否越界和相交
{
int i;
if(s[0].x=W-3 || s[0].x=2 || s[0].y=H-1 || s[0].y=2)
{
setxy(W/2-5,0);
printf("game over\n");
stop=true;
if(old_max_countmax_count)
{
char t[5]={'\0'};
sprintf(t,"%d",max_count);
WritePrivateProfileString("MAX_COUNT","max_count",t,ini_path);
}
}
for(i=1;ilen;i++)
{
if(s[i].x==s[0].x s[i].y==s[0].y)
{
setxy(W/2-5,0);
printf("game over\n");
stop=true;
if(old_max_countmax_count)
{
char t[5]={'\0'};
sprintf(t,"%d",max_count);
WritePrivateProfileString("MAX_COUNT","max_count",t,ini_path);
}
break;
}
}
if(stop==true)
{
KillTimer(NULL,timerID);
int c;
while(1)
{
fflush(stdin);
c=_getch();
if(c=='n' || c=='N')
{
start();
}
else if(c=='q' || c=='Q')
{
exit(0);
}
else continue;
}
}
}
void printf_body(bool is_first) //打印蛇身
{
if(is_first==true) //如果是第一次打印蛇身
{
int i;
for(i=0;ilen;i++)
{
setxy(s[i].x,s[i].y);
printf("O");
}
}
else //如果不是第一次打印蛇身
{
setxy(end.x,end.y);
printf(" ");
setxy(s[0].x,s[0].y);
printf("O");
}
if(food.x==s[0].x food.y==s[0].y) //如果吃到食物
{
count++;
isfood=false; //重置食物
set_food();
len++;
KillTimer(NULL,timerID);
if(speed100) speed-=10;
else if(speed50) speed-=5;
else if(speed30) speed-=2;
else if(speed16) speed-=1;
else ;
setxy(0,0);
if(max_countcount) max_count=count;
printf(" speed : %d ms score : %d best score:%d ",speed,count,max_count);
timerID=SetTimer(NULL,001,speed,TimerProc);
}
}
void change_body_pos(int x, int y) //改变蛇身的坐标数据
{
end.x=s[len-1].x;
end.y=s[len-1].y;
int i;
for(i=len-1;i0;i--)
{
s[i].x=s[i-1].x;
s[i].y=s[i-1].y;
}
s[0].x=x;
s[0].y=y;
}
void CALLBACK TimerProc(
HWND hwnd,
UINT message,
UINT idTimer,
DWORD dwTime)
{
switch(direct)
{
case 0:
head.x++;
change_body_pos(head.x,head.y);
printf_body(false);
check_board();
break;
case 1:
head.y++;
change_body_pos(head.x,head.y);
printf_body(false);
check_board();
break;
case 2:
head.x--;
change_body_pos(head.x,head.y);
printf_body(false);
check_board();
break;
case 3:
head.y--;
change_body_pos(head.x,head.y);
printf_body(false);
check_board();
break;
}
}
void start()
{
int i;
KillTimer(NULL,timerID);
count=0; //得分
len=20; //当前蛇身长度
direct=0; //方向: 0-向右, 1-向下, 2-向左, 3-向上
speed=200; //速度:毫秒
isfood=false; //食物是否存在
stop=false; //停止
system("cls");
setxy(1,4);
printf("┌─────────────────────────────────────┐\n");
for(i=0;i33;i++)
{
printf(" │ │\n");
}
printf(" └─────────────────────────────────────┘");
head.x=len-1+5;
head.y=H/2;
for(i=0;ilen;i++)
{
s[i].x=head.x-i;
s[i].y=head.y;
}
setxy(0,0);
printf(" speed : %d:ms score : %d best score:%d ",speed,count,max_count);
printf_body(true);
set_food();
timerID=SetTimer(NULL,001,speed,TimerProc);
int c;
MSG msg;
while(GetMessage(msg,NULL,0,0))
{
if(stop==true) break;
if(_kbhit()) //如果按下的是方向键或功能键, _getch()要调用两次,第一次返回0XE0或0
{
fflush(stdin);
c=_getch(); //上: 72 下:80 左:75 右:77
if(c==0XE0 || c==0)
{
c=_getch();
if(c==72 direct!=1 direct!=3)
{
direct=3;
}
else if(c==80 direct!=1 direct!=3)
{
direct=1;
}
else if(c==75 direct!=0 direct!=2)
{
direct=2;
}
else if(c==77 direct!=0 direct!=2)
{
direct=0;
}
}
else if(c==' ')
{
setxy(W/2-10,0);
system("pause");
setxy(W/2-10,0);
printf(" ");
}
}
if(msg.message==WM_TIMER)
{
DispatchMessage(msg);
}
}
}
int main()
{
ini_path=(char*)malloc(sizeof(char)*50);
srand((unsigned)time(0));
getcwd(ini_path,50);//取得当前程序绝对路径
ini_path=strcat(ini_path,"snake.dat");
max_count=GetPrivateProfileInt("MAX_COUNT","max_count",0,ini_path);
old_max_count=max_count;
char cmd[50];
sprintf(cmd,"mode con cols=%d lines=%d\0",W,H);
system(cmd);//改变CMD窗口大小
hide_cursor();
start();
return 0;
}
Q2: C语言暂停代码是什么?
可以通过system ("pause");实现暂停贪吃蛇c语言代码暂停函数,应包括stdlib.h头文件。
还可以通过使用getch()和getchar()函数实现贪吃蛇c语言代码暂停函数,注意应该相应地包括conio.h和stdio.h文件贪吃蛇c语言代码暂停函数,getch()为非标准函数,需要注意程序贪吃蛇c语言代码暂停函数的移植性。
Q3: c语言怎么编写暂停函数和开始函数
可以在你想暂停的地方加上一句“getchar()”,运行时当运行到这句时就暂停了,当你键盘输入回车键后,程序会继续运行。
Q4: 贪吃蛇(C语言),“程序已停止工作”的问题
你好贪吃蛇c语言代码暂停函数,我是一名高中生,你所说贪吃蛇c语言代码暂停函数的贪吃蛇程序我也写了一个,不知道能否对你有帮助。
不过因为指针和结构体我还没学到,所以只用了数组和循环。
#define S 100
#define M 23
#define MM 80
#includestdio.h
#includewindows.h
#includeconio.h
#includetime.h
int a[M*MM]={5,5,5,5};
int b[M*MM]={5,6,7,8};
int l=4,x,y,n=0;
void gotoxy(int y , int x)
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
void move(char ch)
{
int i,j;
for(i=0;il-1;i++)
{
a[i]=a[i+1];
b[i]=b[i+1];
}
if(ch=='w'||ch=='W')
a[l-1]--;
if(ch=='s'||ch=='S')
a[l-1]++;
if(ch=='a'||ch=='A')
b[l-1]--;
if(ch=='d'||ch=='D')
b[l-1]++;
if(out())
{
for(j=1;jl-1;j++)
{
gotoxy(a[j],b[j]);
printf("*");
}
gotoxy(a[j],b[j]);
putchar('#');
gotoxy(a[0],b[0]);
putchar(' ');
Sleep(S);
}
else
{
gotoxy(M/2,MM/2-12);
printf("You Lose! Score:%d",n);
getch();
exit(0);
}
}
int out(void)
{
int i;
if(a[l-1]=M-1||b[l-1]=MM-1||a[l-1]=0||b[l-1]=0)
return 0;
for(i=0;il-1;i++)
if(a[i]==a[l-1]b[i]==b[l-1])
return 0;
return 1;
}
void sweet(void)
{
int f=1,i;
while(f--)
{
x=rand()%M;
y=rand()%MM;
for(i=0;il;i++)
if(x==a[i]y==b[i]||x==0||y==0||x==M-1||y==MM-1)
f=1;
else
{
gotoxy(x,y);
putchar('');
}
}
}
int eat(void)
{
int i,j,k;
if(a[l-1]==xb[l-1]==y)
{
l++;
n++;
gotoxy(M,MM/2-8);
printf("Your Score:%d",n);
a[l-1]=x;
b[l-1]=y;
for(i=l-2;i0;i--)
{
a[i]=a[i-1];
b[i]=b[i-1];
}
for(j=1;jl-1;j++)
{
gotoxy(a[j],b[j]);
printf("*");
}
gotoxy(a[j],b[j]);
putchar('#');
sweet();
return 1;
}
return 0;
}
void start(void)
{
int i,j,k;
gotoxy(M,MM/2-8);
printf("Your Score:%d",n);
gotoxy(M,0+5);
printf("Ver V1.0");
gotoxy(M,MM-20);
printf("Made By Lxbs");
sweet();
for(i=0;iMM;i++)
{
gotoxy(0,i);
putchar('@');
gotoxy(M-1,i);
putchar('@');
}
for(j=0;jM;j++)
{
gotoxy(j,0);
putchar('@');
gotoxy(j,MM-1);
putchar('@');
}
}
int main(void)
{
srand((unsigned)time(NULL));
char ch='d';
start();
for(;;)
{
if(kbhit())
ch=getch();
switch(ch)
{
case 'W':
case 'w':
case 'S':
case 's':
case 'A':
case 'a':
case 'D':
case 'd':if(!eat())move(ch);break;
default:break;
}
}
}
字符版
#includegraphics.h
#includewindows.h
#includetime.h
void move(char ch);
int a[100]={60,80,100,120};
int b[100]={60,60,60,60};
int c[100]={75,95,115,135};
int d[100]={75,75,75,75};
int l=4;
int aa,bb,cc,dd;
char str[4]={'0','0','0','0'};
int s=0;
int out(void)
{
int i;
if(a[l-1]=335||b[l-1]=335||a[l-1]=0||b[l-1]=0)
return 0;
for(i=0;il-1;i++)
if(a[i]==a[l-1]b[i]==b[l-1]c[i]==c[l-1]d[i]==d[l-1])
return 0;
return 1;
}
void sweet(void)
{
int f=1,i;
while(f--)
{
bb=rand()%200+20;
aa=rand()%200+20;
for(;bb%20!=0;)
bb++;
for(;aa%20!=0;)
aa++;
cc=aa+15;
dd=bb+15;
setcolor(GREEN);
for(i=0;il;i++)
if(aa==a[i]bb==b[i]cc==c[i]dd==d[i])
f=1;
else
rectangle(aa,bb,cc,dd);
}
}
int eat(void)
{
int i,j=3,k;
if(a[l-1]==aab[l-1]==bbc[l-1]==ccd[l-1]==dd)
{
l++;
s++;
k=s;
while(k)
{
str[j]=k%10+48;
k/=10;
j--;
}
outtextxy(380,235,str);
a[l-1]=aa;
b[l-1]=bb;
c[l-1]=cc;
d[l-1]=dd;
for(i=l-2;i0;i--)
{
a[i]=a[i-1];
b[i]=b[i-1];
c[i]=c[i-1];
d[i]=d[i-1];
}
setcolor(YELLOW);
for(i=1;il-1;i++)
rectangle(a[i],b[i],c[i],d[i]);
setcolor(RED);
rectangle(a[i],b[i],c[i],d[i]);
sweet();
return 1;
}
return 0;
}
void start()
{
int M=475,N=355,S=20,T=15,lx=0,rx=15,ly=0,ry=15;
int i,j;
char ch[3][8][15]=
{
{"【游戏说明】"," 版本:Ver2.0"," A 左移"," D 右移"," W 上移"," S 下移"},
{"【当前分数】"},
{"【游戏作者】"," 流星不死"}
};
initgraph(M, N);
setcolor(WHITE);
setbkcolor(BLACK);
for(i=0;i=N;i+=S)
rectangle(lx,i,rx,T+i);
lx=M-15;
rx=M;
for(i=0;i=N;i+=S)
rectangle(lx,i,rx,T+i);
for(j=0;j=M;j+=S)
rectangle(j,ly,T+j,ry);
ly=N-15;
ry=N;
for(j=0;j=M;j+=S)
rectangle(j,ly,T+j,ry);
lx=M-135;
rx=M-120;
for(i=0;i=N;i+=S)
rectangle(lx,i,rx,T+i);
for(i=0;i6;i++)
rectangle(lx+i*S,180,rx+i*20,195);
for(i=0;i6;i++)
rectangle(lx+i*S,260,rx+i*20,275);
for(i=0;i7;i++)
outtextxy(360,30+i*25,ch[0][i]);
outtextxy(360,210,ch[1][0]);
for(i=0;i2;i++)
outtextxy(360,290+i*25,ch[2][i]);
outtextxy(380,235,str);
sweet();
}
void gotoxy(int y , int x)
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
void main()
{
srand((unsigned)time(NULL));
int i;
char ch='d';
start();
setcolor(WHITE);
for(i=1;i4;i++)
rectangle(a[i],b[i],c[i],d[i]);
for(;;)
{
if(kbhit())
ch=getch();
switch(ch)
{
case 'W':
case 'w':
case 'S':
case 's':
case 'A':
case 'a':
case 'D':
case 'd':if(!eat())move(ch);break;
default:break;
}
}
}
void move(char ch)
{
int i,j;
for(i=0;il-1;i++)
{
a[i]=a[i+1];
b[i]=b[i+1];
c[i]=c[i+1];
d[i]=d[i+1];
}
if(ch=='w'||ch=='W')
{b[l-1]-=20;d[l-1]-=20;}
if(ch=='s'||ch=='S')
{b[l-1]+=20;d[l-1]+=20;}
if(ch=='a'||ch=='A')
{a[l-1]-=20;c[l-1]-=20;}
if(ch=='d'||ch=='D')
{a[l-1]+=20;c[l-1]+=20;}
if(out())
{
setcolor(RED);
rectangle(a[i],b[i],c[i],d[i]);
for(j=1;jl-1;j++)
{
setcolor(YELLOW);
rectangle(a[j],b[j],c[j],d[j]);
}
setcolor(BLACK);
rectangle(a[0],b[0],c[0],d[0]);
setcolor(WHITE);
Sleep(100);
}
else
{
outtextxy(180,180,"你输了!");
outtextxy(380,235,str);
getch();
closegraph();
}
}
ege图形库版本
Q5: c语言编程贪吃蛇时,怎么让它暂停
getchar()//让用户输入一个字符 需要stdio.h
或者 system("pause"); //暂停 需要stdlib.h
贪吃蛇c语言代码暂停函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言贪吃蛇代码及解析、贪吃蛇c语言代码暂停函数的信息别忘了在本站进行查找喔。







