求一个完整的,C语言编写的贪吃蛇小游戏。

来源:百度问答 责任编辑:张俊
默认
特大
宋体
黑体
雅黑
楷体


求一个完整的,C语言编写的贪吃蛇小游戏。(图2)


求一个完整的,C语言编写的贪吃蛇小游戏。(图4)


求一个完整的,C语言编写的贪吃蛇小游戏。(图9)


求一个完整的,C语言编写的贪吃蛇小游戏。(图13)


求一个完整的,C语言编写的贪吃蛇小游戏。(图15)


求一个完整的,C语言编写的贪吃蛇小游戏。(图19)

  为了解决用户可能碰到关于"求一个完整的,C语言编写的贪吃蛇小游戏。"相关的问题,突袭网经过收集整理为用户提供相关的解决办法,请注意,解决办法仅供参考,不代表本网同意其意见,如有任何问题请与本网联系。"求一个完整的,C语言编写的贪吃蛇小游戏。"相关的详细问题如下:求一个完整的,C语言编写的贪吃蛇小游戏。
===========突袭网收集的解决方案如下===========

解决方案1:

/*
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; //历史最高分,如果count>max_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;i<len;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_count<max_count)
{
char t[5]={'\0'};
sprintf(t,"%d",max_count);
WritePrivateProfileString("MAX_COUNT","max_count",t,ini_path);
}
}
for(i=1;i<len;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_count<max_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;i<len;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(speed>100) speed-=10;
else if(speed>50) speed-=5;
else if(speed>30) speed-=2;
else if(speed>16) speed-=1;
else ;
setxy(0,0);
if(max_count<count) 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;i>0;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;i<33;i++)
{
printf(" │                                                                          │\n");
}
printf(" └─────────────────────────────────────┘");
head.x=len-1+5;
head.y=H/2;
for(i=0;i<len;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;
} 追问 这个是在VC6.0里面运行的吗?

求一个完整的,C语言编写的贪吃蛇小游戏。

答:/*program by wlfryq 71693456@qq.com*/#include #include #include #include #include #include #include #define W 80 //屏幕宽度 #define H 37 //屏幕高度 #define SNAKE_ALL_LENGTH 200 //蛇身最长为 void CALLBACK TimerProc(HWND hwnd, UI...

求用c语言编写的贪吃蛇程序

答:#include #include #include #include /*引用的库函数*/ #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b/*宏定义键名*/ #define N 200 int i,key; int level;/*游戏等级*/ int score=0;/*...

用c语言编写的贪食蛇游戏

答:这是一个成功的贪吃蛇代码(c语言编写的),希望你能看懂!慢慢看: #define N 200 #include #include #include #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b int i,key; int score=0;/...

求c语言的那些小游戏源码,就是贪吃蛇那些的,要纯...

答:http://www.oschina.net/code/snippet_143423_4296 http://www.oschina.net/code/snippet_1998291_38053

C语言的贪吃蛇源代码

答: //******友情提示:如想速度快点,请改小_sleep(500)函数中参数***** #include #include #include #include #include const int H = 8; //地图的高 const int L = 16; //地图的长 char GameMap[H][L]; //游戏地图 int key; //按键保存 int sum = ...

用c语言写一个贪吃蛇游戏

答:#include #include #include #include #include #include int grade=5,point=0,life=3; void set(),menu(),move_head(),move_body(),move(),init_insect(),left(),upon(),right(),down(),init_graph(),food_f(),ahead(),crate(); struct bug { i...

C语言课程设计 贪吃蛇

答:2.1程序功能介绍 贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇...

贪吃蛇怎么用C语言编写

答:#include #include #include #include /*引用的库函数*/ #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b/*宏定义键名*/ #define N 200 int i,key; int level;/*游戏等级*/ int score=0;/*...

如图这是我用c语言写的贪吃蛇

答:思路是不用cls, 在头部坐标位置printf("*"), 在尾部坐标位置printf(" ")

贪吃蛇用c语言编写

答:设个while ,每次循环蛇头节点向前走(要保存方向)。然后后部节点逐一向前移动。 如果长得都一样,可以直接把尾部节点移动到头部移动方向的一个节点 然后sleep一段时间就好了

声明:突袭网提供的解决方案均由系统收集自互联网,仅供参考,突袭网不保证其准确性,亦不代表突袭网观点,请自行判断真伪,突袭网不承担任何法律责任.

为您准备的相关内容:

  • 求c语言的那些小游戏源码,就是贪吃蛇那些的,要纯c写的,越多...
  • 用c语言写一个贪吃蛇游戏
  • 求一段c语言编写的贪吃蛇游戏代码,最好直接是.c的程序,拿过...
  • 想要独自编写一个像贪吃蛇这样的小游戏,要学到什么什么水平?关...
  • 用C语言编写贪吃蛇游戏的程序
  • 用C语言编写贪吃蛇的游戏需要哪些方面的知识
  • 急!!!求高手用c语言写一个贪吃蛇游戏;重要的是详细的注解;
  • C语言贪吃蛇小游戏
  • >>> 温馨提示:您还可以点击下面分页查看更多相关内容 <<<

    头条

    热门

    24小时热评

    热点排行榜

    Copyright ? 2012-2016 tuxi.com.cn 版权所有 京ICP备10044368号 京公网安备11010802011102号 关于我们 | 广告服务 | 诚聘英才 | 联系我们 | 友情链接 | 免责申明