首页>>后端>>Golang->c语言开发贪吃蛇?

c语言开发贪吃蛇?

时间:2023-12-05 本站 点击:0

用C语言编写贪吃蛇游戏的程序

回答:Mr.emily

大师

6月3日 16:45 #define N 200

#includegraphics.h

#includestdlib.h

#includedos.h

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define Esc 0x011b

int i,key;

int score=0;

int gamespeed=50000;

struct Food

{int x;

int y;

int yes;

}food;

struct Snake

{int x[N];

int y[N];

int node;

int direction;

int life;

}snake;

void Init();

void Close();

void DrawK();

void GamePlay();

void GameOver();

void PrScore();

void main()

{ Init();

DrawK();

GamePlay();

Close();

}

void Init()

{int gd=DETECT,gm;

initgraph(gd,gm,"F:\\tuoboc2");/*此处为turboc的路径,读者可以根据自己的电脑而改*/

cleardevice();

}

void DrawK()

{setbkcolor(LIGHTGREEN);

setcolor(11);

setlinestyle(SOLID_LINE,0,THICK_WIDTH);

for(i=50;i=600;i+=10)

{rectangle(i,40,i+10,49);

rectangle(i,451,i+10,460);

}

for(i=40;i=450;i+=10)

{rectangle(50,i,59,i+10);

rectangle(601,i,610,i+10);

}

}

void GamePlay()

{randomize();

food.yes=1;

snake.life=0;

snake.direction=1;

snake.x[0]=100;snake.y[0]=100;

snake.x[1]=110;snake.y[1]=100 ;

snake.node=2;

PrScore();

while(1)

{while(!kbhit())

{ if(food.yes==1)

{food.x=rand()%400+60;

food.y=rand()%350+60;

while(food.x%10!=0)

food.x++;

while(food.y%10!=0)

food.y++;

food.yes=0;

}

if(food.yes==0)

{setcolor(GREEN);

rectangle(food.x,food.y,food.x+10,food.y-10);

}

for(i=snake.node-1;i0;i--)

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

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

}

switch(snake.direction)

{case 1:

snake.x[0]+=10;break;

case 2:

snake.x[0]-=10;break;

case 3:

snake.y[0]-=10;break;

case 4:

snake.y[0]+=10;break;

}

for(i=3;isnake.node;i++)

{

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

{ GameOver();

snake.life=1;

break;

}

}

if(snake.x[0]55||snake.x[0]595||snake.y[0]55||snake.y[0]455)

{GameOver();

snake.life=1;

}

if(snake.life==1)

break;

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

{setcolor(0);

rectangle(food.x,food.y,food.x+10,food.y-10);

snake.x[snake.node]=-20;

snake.y[snake.node]=-20;

snake.node++;

food.yes=1;

score+=10;

PrScore();

}

setcolor(4);

for(i=0;isnake.node;i++)

rectangle(snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10);

delay(gamespeed);

setcolor(0);

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

}

if(snake.life==1)

break;

key=bioskey(0);

if(key==Esc)

break;

else if(key==UPsnake.direction!=4)

snake.direction=3;

else if(key==RIGHTsnake.direction!=2)

snake.direction=1;

else if(key==LEFTsnake.direction!=1)

snake.direction=2;

else if(key==DOWNsnake.direction!=3)

snake.direction=4;

}

}

void GameOver()

{

cleardevice();

PrScore();

setcolor(RED);

settextstyle(3,0,4);

outtextxy(100,100,"Mengmeng,i love you!");

getch();

}

void PrScore()

{char str[10];

setfillstyle(SOLID_FILL,YELLOW);

bar(50,15,220,35);

setcolor(6);

settextstyle(0,0,2);

sprintf(str,"score:%d",score);

outtextxy(55,20,str);

}

void Close()

{ getch();

closegraph();

}

Mr.emily

如何用C语言写贪吃蛇

#includeconio.h #includegraphics.h #includetime.h #includestring.h #includemalloc.h #includestdio.h 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 { int x; int y; struct bug *last; struct bug *next; }; struct fd { int x; int y; int judge; }food={0,0,0}; struct bug *head_f=NULL,*head_l,*p1=NULL,*p2=NULL; void main() { char ch; initgraph(800,600); set(); init_insect(); while(1) { food_f(); Sleep(grade*10); setcolor(BLACK); circle(head_l-x,head_l-y,2); setcolor(WHITE); move_body(); if(kbhit()) { ch=getch(); if(ch==27) { ahead(); set(); } else if(ch==-32) { switch(getch()) { case 72:upon();break; case 80:down();break; case 75:left();break; case 77:right();break; } } else ahead(); } else { ahead(); } if(head_f-x==food.xhead_f-y==food.y) { Sleep(100); crate(); food.judge=0; point=point+(6-grade)*10; if(food.x30||food.y30||food.x570||food.y570) life++; menu(); } if(head_f-x5||head_f-x595||head_f-y5||head_f-y595) { Sleep(1000); life--; food.judge=0; init_graph(); init_insect(); menu(); } for(p1=head_f-next;p1!=NULL;p1=p1-next) { if(head_f-x==p1-xhead_f-y==p1-y) { Sleep(1000); life--; food.judge=0; init_graph(); init_insect(); menu(); break; } } if(life==0) { outtextxy(280,300,"游戏结束!"); getch(); return; } move(); }; } void init_graph() { clearviewport(); setlinestyle(PS_SOLID,1,5); rectangle(2,2,600,598); setlinestyle(PS_SOLID,1,1); } void set() { init_graph(); outtextxy(640,50,"1、开始 / 返回"); outtextxy(640,70,"2、退出"); outtextxy(640,90,"3、难度"); outtextxy(640,110,"4、重新开始"); switch(getch()) { case '1': menu();setcolor(GREEN);circle(food.x,food.y,2);setcolor(WHITE);return; case '2': exit(0);break; case '3': outtextxy(700,90,":1 2 3 4 5");grade=getch()-48;set();break; case '4': food.judge=0,grade=5;point=0;life=3;init_insect();menu();break; default: outtextxy(250,300,"输入错误!"); set();break; } } void menu() { char str[20],str1[]={"分数:"},str2[]={"难度:"},str3[]={"生命值:"}; init_graph(); sprintf(str,"%d",point); strcat(str1,str); outtextxy(640,50,str1); sprintf(str,"%d",grade); strcat(str2,str); outtextxy(640,70,str2); sprintf(str,"%d",life); strcat(str3,str); outtextxy(640,90,str3); outtextxy(640,110,"设置:ESC"); } void init_insect() { head_f=(struct bug *)malloc(sizeof(struct bug)); head_f-last=NULL; head_f-x=300; head_f-y=300; p2=head_f-next=p1=(struct bug *)malloc(sizeof(struct bug)); p1-last=head_f; p1-x=295; p1-y=300; p1=p1-next=(struct bug *)malloc(sizeof(struct bug)); p1-next=NULL; p1-x=290; p1-y=300; p1-last=p2; head_l=p1; } void move() { for(p1=head_f;p1!=NULL;p1=p1-next) { circle(p1-x,p1-y,2); } } void move_head() { } void move_body() { for(p1=head_l,p2=p1-last;p2!=NULL;p1=p2,p2=p2-last) { p1-x=p2-x; p1-y=p2-y; } } void ahead() { p1=head_f; p2=p1-next; p2=p2-next; if(p1-x==p2-x) { if(p1-yp2-y) head_f-y+=5; else head_f-y-=5; } else { if(p1-xp2-x) { head_f-x+=5; } else head_f-x-=5; } } void upon() { p1=head_f-next; p1=p1-next; head_f-y-=5; if(p1-x==head_f-xp1-y==head_f-y) { head_f-y+=5; ahead(); } } void down() { p1=head_f-next; p1=p1-next; head_f-y+=5; if(p1-x==head_f-xp1-y==head_f-y) { head_f-y-=5; ahead(); } } void left() { p1=head_f-next; p1=p1-next; head_f-x-=5; if(p1-x==head_f-xp1-y==head_f-y) { head_f-x+=5; ahead(); } } void right() { p1=head_f-next; p1=p1-next; head_f-x+=5; if(p1-x==head_f-xp1-y==head_f-y) { head_f-x-=5; ahead(); } } void food_f() { if(!food.judge) { food.x=(rand()%117+1)*5; food.y=(rand()%117+1)*5; food.judge=1; if(food.x30||food.y30||food.x570||food.y570) { setcolor(RED); circle(f

用c语言设计贪吃蛇游戏

// Copyright liaoqb

#include windows.h

#include stdlib.h

#include time.h

const int LENGTH = 40;

const int WIDTH = 10;

const int RANGE = 50;

const int BeginLength = 5;

const int speed = 300;

#define SNAKE_COLOR RGB(176, 196, 222)

#define BACKGROUND_COLOR RGB(255, 255, 0)

#define DRAW_SNAKE(x) (x) * WIDTH

enum IsSnake {isSnake, isNotSnake, isFood};

IsSnake map[LENGTH][LENGTH];

struct snake {

  int x;

  int y;

  snake* next;

  snake(int x, int y, snake* n = NULL) {

    this - x = x;

this - y = y;

next = n;

  }

};  // snake

typedef struct snake Snake;

Snake* head = NULL;  // queue

Snake* tail = NULL;  // queue

int direct = 0;  // direction

RECT playground;  // district

TCHAR szAppName[] = TEXT("-*- snake game -* ");  // The project name

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);  // message function

void Initializer();

void Controller(Snake*,LPVOID);  // control the snake

void Move(HWND);

void PutFood();

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, PSTR szCmdLine, int iCmdShow) {

  MSG msg;

  HWND hwnd;

  WNDCLASS wndclass;

  while (TRUE) {

wndclass.cbClsExtra = 0;

wndclass.cbWndExtra = 0;

wndclass.hbrBackground = CreateSolidBrush(RGB(255, 255, 255));

wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);

wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);

wndclass.hInstance = hInstance;

wndclass.lpfnWndProc = WndProc;

wndclass.lpszClassName = szAppName;

wndclass.lpszMenuName = NULL;

wndclass.style = CS_HREDRAW | CS_VREDRAW;

if (!RegisterClass(wndclass)) {

 MessageBox(NULL, TEXT("Please try again!!!"), szAppName, MB_ICONERROR);

 return 0;

}

break;

  }

  hwnd = CreateWindow(szAppName, TEXT("^_^ Snake Game ^_^"), WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,

NULL, NULL, hInstance, NULL);

  ShowWindow(hwnd, SW_NORMAL);

  UpdateWindow(hwnd);

  while (TRUE) {

if (PeekMessage(msg, NULL, 0, 0, PM_REMOVE)) {

 if (msg.message == WM_QUIT)

   break;

 TranslateMessage(msg);

 DispatchMessage(msg);

} else {

 Move(hwnd);

}

  }

  return msg.wParam;

}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {

  HDC hdc;

  PAINTSTRUCT ps;

  HBRUSH hBrush;

  switch (message) {

  case WM_DESTROY:

PostQuitMessage(0);

return 0;

  case WM_CREATE:

Initializer();

MoveWindow(hwnd, RANGE, RANGE, WIDTH * LENGTH + RANGE * 3, WIDTH * LENGTH + RANGE * 3, TRUE);

return 0;

  case WM_KEYDOWN:

switch (wParam) {

case VK_LEFT:

 if (direct != VK_RIGHT)

direct = VK_LEFT;

 break;

case VK_RIGHT:

 if (direct != VK_LEFT)

direct = VK_RIGHT;

 break;

case VK_UP:

 if (direct != VK_DOWN)

direct = VK_UP;

 break;

case VK_DOWN:

 if (direct != VK_UP)

direct = VK_DOWN;

 break;

default:

 break;

}

return 0;

  case WM_PAINT:

hdc = BeginPaint(hwnd, ps);

SetViewportOrgEx(hdc, RANGE, RANGE, NULL);

hBrush = CreateSolidBrush(BACKGROUND_COLOR);

SelectObject(hdc, hBrush);

Rectangle(hdc,playground.left, playground.top, playground.right, playground.bottom);

DeleteObject(hBrush);

hBrush = CreateSolidBrush(SNAKE_COLOR);

SelectObject(hdc,hBrush);

for (int i = 0; i  LENGTH; ++i) {

 for (int j = 0; j  LENGTH; ++j) {

if (map[i][j] == isSnake || map[i][j] == isFood) {

 Rectangle(hdc, DRAW_SNAKE(i), DRAW_SNAKE(j), DRAW_SNAKE(i + 1), DRAW_SNAKE(j + 1));

}

 }

}

DeleteObject(hBrush);

EndPaint(hwnd, ps);

  }

  return DefWindowProc(hwnd, message, wParam, lParam);

}

void Initializer() {

  for (int i = 0; i  LENGTH; ++i) {

for (int j = 0; j  LENGTH; ++j) {

 map[i][j] = isNotSnake;

}

  }

  for (i = 0; i  BeginLength; ++i) {

if (i == 0) {

 head = tail = new snake(i, 0);

} else {

 snake* temp = new snake(i, 0);

 tail - next = temp;

 tail = temp;

}

map[i][0] = isSnake;

  }

  playground.left = playground.top = 0;

  playground.right = playground.bottom = WIDTH * LENGTH;

  direct = VK_RIGHT;

  PutFood();

}

void PutFood() {

  srand(static_castunsigned(time(NULL)));

  int x, y;

  do {

    x = rand() % LENGTH;

y = rand() % LENGTH;

  } while (map[x][y] == isSnake);

  map[x][y] = isFood;

}  // put food

void Move(HWND hwnd) {

  snake* temp;

  switch (direct) {

  case VK_LEFT:

temp = new snake(tail - x - 1, tail - y);

break;

  case VK_RIGHT:

temp = new snake(tail - x + 1, tail - y);

break;

  case VK_UP:

temp = new snake(tail - x, tail - y - 1);

break;

  case VK_DOWN:

temp = new snake(tail - x, tail - y + 1);

break;

  }

  Controller(temp,hwnd);

  //InvalidateRect(hwnd,NULL,FALSE);

  Sleep(speed);  // control speed

}  // snake moving

void Controller(Snake* temp,LPVOID lParam) {

HWND hwnd;

hwnd=(HWND)lParam;

  if (temp - x  0 || temp - x = LENGTH || temp - y  0 || temp - y = LENGTH

|| map[temp - x][temp - y] == isSnake) {  // the snake is died

    MessageBox(NULL,TEXT("Copyright liaoqb Sorry !!! Game Over !!! Copyright liaoqb"),szAppName,0);

delete temp;

while (head != NULL) {

 Snake* ptr = head;

 head = head - next;

 delete ptr;

}

head = tail = temp = NULL;

Initializer();

return;

  } else if (map[temp - x][temp - y] == isNotSnake) {  // move

    map[temp - x][temp - y] = isSnake;

map[head - x][head - y] = isNotSnake;

snake* ptr = head;

head = head - next;

delete ptr;

tail - next = temp;

tail = temp;

InvalidateRect(hwnd,NULL,FALSE);

  } else {  // if eat food

    map[temp - x][temp - y] = isSnake;

tail - next = temp;

tail = temp;

PutFood();

//InvalidateRect(hwnd,NULL,FALSE);

  }

}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Golang/12606.html