c语言贪吃蛇怎么选难度,贪吃蛇怎么不对?

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

贪吃蛇怎么不对?

#include

#include

#include

#include

#define SIZEMAX   100  /*长度*/

#define SNAKELEN  10   /*移动距离*/

#define SPEED     100  /*初始速度*/

typedef enum

{

left,right,up,donw

}DIR;

typedef struct

{

int x;

int y;

}COOR;

struct FOOD

{

COOR crd;

int flag;

}food;

struct SNAKE

{

COOR crd[SIZEMAX];

int node;

DIR dir;

}snake;

int speed=SPEED;

/*主函数*/

void main()

{

init();

while(1){

while(!kbhit())   {

if(!food.flag)   setfoodcrd();

showfood();

judgerlod();

judgesef();

snakemove();

Sleep(speed);

}

changeskdir();

}

}

void init()

{

initgraph(640,480);

srand(time(NULL));

food.flag=0;

snake.crd[0].x=0+SNAKELEN;

snake.crd[0].y=0;

snake.crd[1].x=0;

snake.crd[1].y=0;

snake.node=2;

snake.dir=right;    /*默认向右*/

}

/*随机生成食物*/

void setfoodcrd()

{

food.crd.x=rand()%(600/SNAKELEN)*SNAKELEN;

food.crd.y=rand()%(480/SNAKELEN)*SNAKELEN;

food.flag=1;

}

/*画食物*/

void showfood()

{

rectangle(food.crd.x,food.crd.y,food.crd.x+SNAKELEN,food.crd.y+SNAKELEN);

}

/*蛇*/

void showsnake()

{

int i;

for(i=snake.node-1;i>=0;i--)

rectangle(snake.crd[i].x,snake.crd[i].y,snake.crd[i].x+SNAKELEN,snake.crd[i].y+SNAKELEN);

setcolor(BLACK);

rectangle(snake.crd[snake.node].x,snake.crd[snake.node].y,snake.crd[snake.node].x+SNAKELEN,snake.crd[snake.node].y+SNAKELEN);

setcolor(WHITE);

rectangle(snake.crd[snake.node-1].x,snake.crd[snake.node-1].y,snake.crd[snake.node-1].x+SNAKELEN,snake.crd[snake.node-1].y+SNAKELEN);

}

/*移动*/

void snakemove()

{

int i,for(i=snake.crd;i>0;i--)

{

snake.crd[i].x=snake.crd[i-1].x;

snake.crd[i].y=snake.crd[i-1].y;

}

switch(snake.dir)

{

case up:snake.crd[0].y-=SNAKELEN;break;

case donw:snake.crd[0].y+=SNAKELEN;break;

case left:snake.crd[0].x-=SNAKELEN;break;

case right:snake.crd[0].x+=SNAKELEN;

}showsnake;

}

/*改变方向*/

void changeskdir()

{

char key;

key=getch();

switch(key)

{

case'w':    case'W':    if(snake.dir!=donw)snake.dir=up;break;

case's':    case'S':    if(snake.dir!=up)snake.dir=donw;break;

case'a':    case'A':    if(snake.dir!=right)snake.dir=left;break;

case'd':    case'D':    if(snake.dir!=left)snake.dir=right;break;

}

}

/*Game Over*/

void judgeslod()

{

int i;

if(snake.crd[0].x<0||snake.crd[0].x>=640||snake.crd[0].y<0||snake.crd[0].y>=480)

gameover();

for(i=snake.node-1;i>0;i--)

if(snake.crd[0].x==snake.crd[i].x&&snake.crd[0].y==snake.crd[i].y)

gameover();

}

/*吃到食物*/

void judgefood()

{

if(snake.crd[0].x==food.crd.x&&snake.crd[0].y==food.crd.y)

{

snake.node++;        setcolor(BLACK);

rectangle(food.crd.x,food.crd.y,food.crd.x+SNAKELEN,food.crd.y+SNAKELEN);

setcolor(WHITE);    food.flag=0;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用windows api 做的贪吃蛇 #include #include"resource.h" #include"Node.h" #include #include TCHAR szAppname[] = TEXT("Snack_eat"); #define SIDE (x_Client/80) #define x_Client 800 #define y_Client 800 #define X_MAX 800-20-SIDE //点x的范围 #define Y_MAX 800-60-SIDE //点y的范围 #define TIME_ID 1 #define SECOND 100 #define NUM_POINT 10 //点的总个数 #define ADD_SCORE 10 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hwnd; //窗口句柄 MSG msg; //消息 WNDCLASS wndclass; //窗口类 HACCEL hAccel;//加速键句柄 wndclass.style = CS_HREDRAW | CS_VREDRAW; //窗口的水平和垂直尺寸被改变时,窗口被重绘 wndclass.lpfnWndProc = WndProc; //窗口过程为WndProc函数 wndclass.cbClsExtra = 0; //预留额外空间 wndclass.cbWndExtra = 0; //预留额外空间 wndclass.hInstance = hInstance; //应用程序的实例句柄,WinMain的第一个参数 wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //设置图标 wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); //载入预定义的鼠标指针 wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //设置画刷 wndclass.lpszMenuName = szAppname; //设置菜单 wndclass.lpszClassName = szAppname; //设置窗口类的名字 if (!RegisterClass(&wndclass))//注册窗口类 { MessageBox(NULL, TEXT("这个程序需要windows NT!"), szAppname, MB_ICONERROR); return 0; } hwnd = CreateWindow(szAppname, TEXT("Snack_eat"),//CreateWindow函数调用时,WndProc将受到WM_CREATE WS_OVERLAPPEDWINDOW&~WS_THICKFRAME& ~WS_MAXIMIZEBOX,//普通的层叠窗口&禁止改变大小&禁止最大化 CW_USEDEFAULT, //初始x坐标(默认) CW_USEDEFAULT, //初始y坐标 x_Client, //初始x方向尺寸 770 y_Client, //初始y方向尺寸 750 NULL, //父窗口句柄 NULL, //窗口菜单句柄 hInstance, //程序实例句柄 WinMain函数中第二个参数 NULL); //创建参数 ShowWindow(hwnd, iCmdShow);//显示窗口,iCmdShow是WinMain的第四个参数,决定窗口在屏幕中的初始化显示形式,例:SW_SHOWNORMAL表示正常显示 UpdateWindow(hwnd);//使窗口客户区重绘,通过向WndProc发送一条WM_PAINT消息而完成的 hAccel = LoadAccelerators(hInstance, szAppname);//加载加速键 while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(hwnd, hAccel, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } }/* while (GetMessage(&msg, NULL, 0, 0))//GetMessage函数从消息队列中得到消息,填充msg。如果msg.message等于WM_QUIT,返回0,否则返回非0 { TranslateMessage(&msg);//将msg返回给windows已进行某些键盘消息的转换 DispatchMessage(&msg);//将msg再次返回给windows }*/ return msg.wParam;//msg.wParam是PostQuitMessage函数的参数值,通常是0 } ...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值