c语言贪吃蛇代码及设计报告(求,贪吃蛇 C语言代码 及其每一步的讲解)

2024-07-24 10:31:42 3

c语言贪吃蛇代码及设计报告(求,贪吃蛇 C语言代码 及其每一步的讲解)

本文目录

求,贪吃蛇 C语言代码 及其每一步的讲解

/* 贪吃蛇程序 by champking */#define N 200#include 《graphics.h》#include 《stdlib.h》#include 《dos.h》#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011bint i,key;int score = 0;/*得分*/int gamespeed = 100000;/*游戏速度自己调整*/struct Food{ int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/}food;/*食物的结构体*/struct Snake{ int x; int y; int node;/*蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0活着,1死亡*/}snake;void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DrawK(void);/*开始画面*/void GameOver(void);/*结束游戏*/void GamePlay(void);/*玩游戏具体过程*/void PrScore(void);/*输出成绩*//*主函数*/void main(void){ Init();/*图形驱动*/ DrawK();/*开始画面*/ GamePlay();/*玩游戏具体过程*/ Close();/*图形结束*/}/*图形驱动*/void Init(void){ int gd = DETECT, gm; initgraph(&gd, &gm, "c:\\tc"); cleardevice();}/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/void DrawK(void){/*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(void){ randomize();/*随机数发生器*/ food.yes = 1;/*1表示需要出现新食物,0表示已经存在食物*/ snake.life = 0;/*活着*/ snake.direction = 1;/*方向往右*/ snake.x = 100;/*蛇头*/ snake.x = 100; snake.node = 2;/*节数*/ PrScore();/*输出得分*/ while(1)/*可以重复玩游戏,压ESC键结束*/ { 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; i 》 0; i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/ { snake.x; snake.y; } /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ switch(snake.direction) { case 1: snake.x += 10; break; case 2: snake.x -= 10; break; case 3: snake.y -= 10; break; case 4: snake.y += 10; break; } for(i = 3; i 《 snake.node; i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/ { if(snake.x) { GameOver();/*显示失败*/ snake.life = 1; break; } } if(snake.x《55|| snake.y》455)/*蛇是否撞到墙壁*/ { GameOver();/*本次游戏结束*/ snake.life=1; /*蛇死*/ } if(snake.life == 1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/ break; if(snake.x == food.y)/*吃到食物以后*/ { setcolor(0);/*把画面上的食物东西去掉*/ rectangle(food.x, food.y, food.x + 10, food.y - 10); snake.x =- 20; /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node++;/*蛇的身体长一节*/ food.yes = 1;/*画面上需要出现新的食物*/ score += 10; PrScore();/*输出新得分*/ } setcolor(4);/*画出蛇*/ for(i = 0; i 《 snake.node; i++) rectangle(snake.x + 10, snake.y - 10); delay(gamespeed); setcolor(0);/*用黑色去除蛇的的最后一节*/ rectangle(snake.x, snake.x - 10); } /*endwhile(!kbhit)*/ if(snake.life == 1)/*如果蛇死就跳出循环*/ break; key = bioskey(0);/*接收按键*/ if(key == ESC)/*按ESC键退出*/ break; else if(key == UP&&snake.direction!=4) /*判断是否往相反的方向移动*/ snake.direction=3; else if(key == RIGHT &&snake.direction != 2) snake.direction=1; else if(key == LEFT && snake.direction != 1) snake.direction = 2; else if(key == DOWN && snake.direction != 3) snake.direction = 4; }/*endwhile(1)*/}/*游戏结束*/void GameOver(void){ cleardevice(); PrScore(); setcolor(RED); settextstyle(0, 0, 4); outtextxy(200, 200, "GAME OVER"); getch();}/*输出成绩*/void PrScore(void){ char str; 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(void){ getch(); closegraph();}

用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) * WIDTHenum IsSnake {isSnake, isNotSnake, isFood};IsSnake map;struct snake {  int x;  int y;  snake* next;  snake(int x, int y, snake* n = NULL) {    this -》 x = x;this -》 y = y;next = n;  }};  // snaketypedef struct snake Snake;Snake* head = NULL;  // queueSnake* tail = NULL;  // queueint direct = 0;  // directionRECT playground;  // districtTCHAR szAppName = TEXT("-*- snake game -* ");  // The project nameLRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);  // message functionvoid Initializer();void Controller(Snake*,LPVOID);  // control the snakevoid 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 == 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 = 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 = isSnake;  }  playground.left = playground.top = 0;  playground.right = playground.bottom = WIDTH * LENGTH;  direct = VK_RIGHT;  PutFood();}void PutFood() {  srand(static_cast《unsigned》(time(NULL)));  int x, y;  do {    x = rand() % LENGTH;y = rand() % LENGTH;  } while (map == isSnake);  map = isFood;}  // put foodvoid 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 movingvoid Controller(Snake* temp,LPVOID lParam) {HWND hwnd;hwnd=(HWND)lParam;  if (temp -》 x 《 0 || temp -》 x 》= LENGTH || temp -》 y 《 0 || temp -》 y 》= LENGTH|| map == 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 == isNotSnake) {  // move    map = isSnake;map = isNotSnake;snake* ptr = head;head = head -》 next;delete ptr;tail -》 next = temp;tail = temp;InvalidateRect(hwnd,NULL,FALSE);  } else {  // if eat food    map = isSnake;tail -》 next = temp;tail = temp;PutFood();//InvalidateRect(hwnd,NULL,FALSE);  }}

贪吃蛇算法的C语言程序设计报告

大哥,这个应该自己到网上找资源吧,要代码会很长很长的,记得大一的时候我们也要求做报告,我做了一个管理系统呵呵,网上找资源吧

c语言贪吃蛇代码及设计报告(求,贪吃蛇 C语言代码 及其每一步的讲解)

本文编辑:admin

更多文章:


权限的意思是什么?Discuz管理员权限

权限的意思是什么?Discuz管理员权限

本文目录权限的意思是什么Discuz管理员权限权限是什么意思安装discuz时的权限问题怎么开启权限权限的意思是什么权限是指为了保证职责的有效履行,任职者必须具备的,对某事项进行决策的范围和程度。在法律规定的权限内。职权范围。权限是指为了保

2024年1月13日 10:40

translate full text(有没有实现chrome那样整个网页翻译过来的脚本)

translate full text(有没有实现chrome那样整个网页翻译过来的脚本)

本文目录有没有实现chrome那样整个网页翻译过来的脚本急求翻译!!!!加载中a是英语什么意思英语家听备查是什么有没有实现chrome那样整个网页翻译过来的脚本Chrome有自带整页翻译的功能,对于不懂其他语言的使用者来说是很方便的,那么我

2024年7月20日 07:38

includefile(include page>和<%@include file%>的区别)

includefile(include page>和<%@include file%>的区别)

本文目录include page>和的区别include file能这么用么include file与include virtual在使用中的区别#include 和#include“file”有什么不同ASP include file能否

2023年7月8日 13:20

统计字符串中字母个数(C#写程序,统计所给字符串中字母的个数、数字的个数和大写字母的个数)

统计字符串中字母个数(C#写程序,统计所给字符串中字母的个数、数字的个数和大写字母的个数)

本文目录C#写程序,统计所给字符串中字母的个数、数字的个数和大写字母的个数在c++里编写函数统计字符串中字母和其他字符的个数编写函数countchar,统计一个字符串中英文字母的个数怎样用列表统计字符串各个字母的个数c语言输入一行字符串,如

2024年7月23日 16:12

html style标签(请问html文档中style标签属于块状元素吗)

html style标签(请问html文档中style标签属于块状元素吗)

本文目录请问html文档中style标签属于块状元素吗html style 标签无法显示颜色html中style为什么在有的地方是标签 有的地方是属性到底是标签还是属性请问html文档中style标签属于块状元素吗应该是不在这个里面,块级元

2024年7月9日 13:44

安卓安装包下载(如何下载旧版本的安卓软件啊)

安卓安装包下载(如何下载旧版本的安卓软件啊)

本文目录如何下载旧版本的安卓软件啊怎样安卓手机端下载安装如何下载旧版本的安卓软件啊“安卓系统手机下载软件方法有很多,为您提供以下几种方式,请您参考: 1.通过手机中“应用商店”搜索需要的软件并下载安装。 2.通过手机浏览器搜索需

2024年6月15日 12:31

kindeditor导入图片(asp.net上 kindeditor上传图片界面无法显示,一直在滚动)

kindeditor导入图片(asp.net上 kindeditor上传图片界面无法显示,一直在滚动)

本文目录asp.net上 kindeditor上传图片界面无法显示,一直在滚动怎样让KindEditor上传图片使用绝对路径KindEditor编辑器插入图片间隙问题!KindEditor编辑器添加图片时怎么没有“图片空间“按钮高分!!eW

2024年7月3日 22:18

三星481贴片机在线编程(三星贴片机sm481软件如何安装到电脑)

三星481贴片机在线编程(三星贴片机sm481软件如何安装到电脑)

本文目录三星贴片机sm481软件如何安装到电脑三星贴片机sm481报警错误代码贴片机编程教程三星481贴片机拼板里面如何设置小拼板让前后不对称PCB板一次贴完三星481贴片机怎么才能更快三星482贴片机怎样离线编程三星481贴片机怎么设置盲

2024年7月21日 14:32

测试软件是什么工作(软件测试工程师具体是干什么的(软件测试员究竟做些什么))

测试软件是什么工作(软件测试工程师具体是干什么的(软件测试员究竟做些什么))

本文目录软件测试工程师具体是干什么的(软件测试员究竟做些什么)软件测试工程师是做什么的软件测试工程师具体是干什么的(软件测试员究竟做些什么)软件测试工程师简单的说是软件开发过程中的质量检测者和保障者,负责软件质量的把关工作。软件测试工程师具

2024年7月17日 04:34

个人简历表格图片(怎样在手机上制作个人简历表格)

个人简历表格图片(怎样在手机上制作个人简历表格)

本文目录怎样在手机上制作个人简历表格带相片的个人简历表格个人简历表 图片格式如何用word制作一份简历表格简单的个人简历表格怎样在手机上制作个人简历表格手机制作简历可以使用WPS office和知页APP,这两款APP都有模板,简单方便,可

2024年7月5日 18:23

sqlserver连接到服务器(怎么连接别的服务器的sqlserver)

sqlserver连接到服务器(怎么连接别的服务器的sqlserver)

各位老铁们好,相信很多人对sqlserver连接到服务器都不是特别的了解,因此呢,今天就来为大家分享下关于sqlserver连接到服务器以及怎么连接别的服务器的sqlserver的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看

2024年8月4日 22:50

公众号号店铺怎么开通(微信公众号怎么开通微店)

公众号号店铺怎么开通(微信公众号怎么开通微店)

本文目录微信公众号怎么开通微店用微信公众平台的订阅号怎么开微店微信公众帐号怎么开通商城店铺怎么在微信公众号开店铺微信公众号怎么开店流程微信微店铺怎么开步骤如何用微信公众号上开自己的店铺微信公众号怎么开店怎么给自己的店铺注册微信公众号微信店铺

2024年3月17日 01:15

excel 字符串转数组(Excel 用公式可以将一串文本转换成数组格式吗)

excel 字符串转数组(Excel 用公式可以将一串文本转换成数组格式吗)

本文目录Excel 用公式可以将一串文本转换成数组格式吗一行代码解决Excel内容转List在excel里如何让1200/25 变成数组{1200,25}EXCEL中如何将一个单元格的内容转化为一个数组Excel 如何把字符串转换成数组Ex

2024年7月20日 07:50

html烟花特效(怎样用canvas特性制作html5烟花的效果)

html烟花特效(怎样用canvas特性制作html5烟花的效果)

本文目录怎样用canvas特性制作html5烟花的效果怎么把这个网页烟花代码的黑色背景去掉或换成红色的html烟花代码打开卡住烟花特效怎么制作爱心烟花特效教程html烟花特效代码怎样用canvas特性制作html5烟花的效果1、熟悉canv

2024年5月18日 20:46

flow3d(flow3d中meshing左边的控制栏怎么打开)

flow3d(flow3d中meshing左边的控制栏怎么打开)

本文目录flow3d中meshing左边的控制栏怎么打开flow3d打不开flow3d网格错误flow3d模拟暂停后可以关闭软件吗flow3d哪个版本好用flow3d计算不完整什么情况flow3d背景调为白色flow3d高版本与低版本是否兼

2024年6月9日 20:45

简述什么是jdbc(JDBC是什么)

简述什么是jdbc(JDBC是什么)

本文目录JDBC是什么JDBC是连接什么和什么的jdbc的主要功能是什么它由哪些部分组成java的API,怎么理解,JDBC是什么JDBC是什么JDBC代表Java数据库连接,这对Java编程语言和广泛的数据库之间独立于数据库的连接标准的J

2024年7月19日 13:25

c语言课后习题(学了没多久C语言,课后练习题完全不会怎么办有没有好一点的学习方法和诀窍)

c语言课后习题(学了没多久C语言,课后练习题完全不会怎么办有没有好一点的学习方法和诀窍)

本文目录学了没多久C语言,课后练习题完全不会怎么办有没有好一点的学习方法和诀窍C语言程序设计教程(第三版)课后习题10.3这是一个C语言课后习题 当a为正数时,请将以下语句改写成switch语句c语言课后题答案求谭浩强第四版C语言程序设计

2024年7月3日 10:11

钩小蝴蝶视频教程(蝴蝶结的钩织教程)

钩小蝴蝶视频教程(蝴蝶结的钩织教程)

大家好,今天小编来为大家解答以下的问题,关于钩小蝴蝶视频教程,蝴蝶结的钩织教程这个很多人还不知道,现在让我们一起来看看吧!本文目录蝴蝶结的钩织教程怎样钩蝴蝶蝴蝶结的钩法钩织小挂件教程怎样钩织蝴蝶毛线钩织蝴蝶结视频教程钩针钩蝴蝶教程图解漂亮蝴

2024年7月11日 06:19

eclipse怎么彻底删除干净(eclipse中怎样删除工程)

eclipse怎么彻底删除干净(eclipse中怎样删除工程)

“eclipse怎么彻底删除干净”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看eclipse怎么彻底删除干净(eclipse中怎样删除工程)!本文目录eclipse中怎样删除工程在CentOS下安装了eclipse,因为版

2024年7月21日 14:30

countblank函数怎么用(excel函数如何计数包括空值的单元格数目)

countblank函数怎么用(excel函数如何计数包括空值的单元格数目)

本文目录excel函数如何计数包括空值的单元格数目如何在excel中用函数统计某一列有内容的单元格数目Excel函数COUNTBLANK 使用问题Excel中的countif函数怎么用啊excel的计数函数怎么用excel函数如何计数包括空

2024年7月11日 16:06

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1156
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索