win32贪吃蛇c语言毕业论文

1.求C语言的贪吃蛇毕业论文、毕业设计

#include #include #include #include #include const int H = 8; //地图的高 const int L = 16; //地图的长 char GameMap[H][L]; //游戏地图 int key; //按键保存 int sum = 1, over = 0; //蛇的长度, 游戏结束(自吃或碰墙) int dx[4] = {0, 0, -1, 1}; //左、右、上、下的方向 int dy[4] = {-1, 1, 0, 0}; struct Snake //蛇的每个节点的数据类型 { int x, y; //左边位置 int now; //保存当前节点的方向, 0,1,2,3分别为左右上下 }Snake[H*L]; const char Shead = '@'; //蛇头 const char Sbody = '#'; //蛇身 const char Sfood = '*'; //食物 const char Snode = '.'; //'.'在地图上标示为空 void Initial(); //地图的初始化 void Create_Food(); //在地图上随机产生食物 void Show(); //刷新显示地图 void Button(); //取出按键,并判断方向 void Move(); //蛇的移动 void Check_Border(); //检查蛇头是否越界 void Check_Head(int x, int y); //检查蛇头移动后的位置情况 int main() { Initial(); Show(); return 0; } void Initial() //地图的初始化 { int i, j; int hx, hy; system("title 贪吃蛇"); //控制台的标题 memset(GameMap, '.', sizeof(GameMap)); //初始化地图全部为空'.' system("cls"); srand(time(0)); //随机种子 hx = rand()%H; //产生蛇头 hy = rand()%L; GameMap[hx][hy] = Shead; Snake[0].x = hx; Snake[0].y = hy; Snake[0].now = -1; Create_Food(); //随机产生食物 for(i = 0; i < H; i++) //地图显示 { for(j = 0; j < L; j++) printf("%c", GameMap[i][j]); printf("\n"); } printf("\n小小C语言贪吃蛇\n"); printf("按任意方向键开始游戏\n"); getch(); //先接受一个按键,使蛇开始往该方向走 Button(); //取出按键,并判断方向 } void Create_Food() //在地图上随机产生食物 { int fx, fy; while(1) { fx = rand()%H; fy = rand()%L; if(GameMap[fx][fy] == '.') //不能出现在蛇所占有的位置 { GameMap[fx][fy] = Sfood; break; } } } void Show() //刷新显示地图 { int i, j; while(1) { _sleep(500); //延迟半秒(1000为1s),即每半秒刷新一次地图 Button(); //先判断按键在移动 Move(); if(over) //自吃或碰墙即游戏结束 { printf("\n**游戏结束**\n"); printf(" >_<\n"); getchar(); break; } system("cls"); //清空地图再显示刷新吼的地图 for(i = 0; i < H; i++) { for(j = 0; j < L; j++) printf("%c", GameMap[i][j]); printf("\n"); } printf("\n小小C语言贪吃蛇\n"); printf("按任意方向键开始游戏\n"); } } void Button() //取出按键,并判断方向 { if(kbhit() != 0) //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0 { while(kbhit() != 0) //可能存在多个按键,要全部取完,以最后一个为主 key = getch(); //将按键从控制台中取出并保存到key中 switch(key) { //左 case 75: Snake[0].now = 0; break; //右 case 77: Snake[0].now = 1; break; //上 case 72: Snake[0].now = 2; break; //下 case 80: Snake[0].now = 3; break; } } } void Move() //蛇的移动 { int i, x, y; int t = sum; //保存当前蛇的长度 //记录当前蛇头的位置,并设置为空,蛇头先移动 x = Snake[0].x; y = Snake[0].y; GameMap[x][y] = '.'; Snake[0].x = Snake[0].x + dx[ Snake[0].now ]; Snake[0].y = Snake[0].y + dy[ Snake[0].now ]; Check_Border(); //蛇头是否越界 Check_Head(x, y); //蛇头移动后的位置情况,参数为: 蛇头的开始位置 if(sum == t) //未吃到食物即蛇身移动哦 for(i = 1; i < sum; i++) //要从蛇尾节点向前移动哦,前一个节点作为参照 { if(i == 1) //尾节点设置为空再移动 GameMap[ Snake[i].x ][ Snake[i].y ] = '.'; if(i == sum-1) //为蛇头后面的蛇身节点,特殊处理 { Snake[i].x = x; Snake[i].y = y; Snake[i].now = Snake[0].now; } else //其他蛇身即走到前一个蛇身位置 { Snake[i].x = Snake[i+1].x; Snake[i].y = Snake[i+1].y; Snake[i].now = Snake[i+1].now; } GameMap[ Snake[i].x ][ Snake[i].y ] = '#'; //移动后要置为'#'蛇身 } } void Check_Border() //检查蛇头是否越界 { if(Snake[0].x < 0 || Snake[0].x >= H || Snake[0].y < 0 || Snake[0].y >= L) over = 1; } void Check_Head(int x, int y) //检查蛇头移动后的位置情况 { if(GameMap[ Snake[0].x ][ Snake[0].y ] == '.') //为空 GameMap[ Snake[0].x ][ Snake[0].y ] = '@'; else if(GameMap[ Snake[0].x ][ Snake[0].y ] == '*') //为食物 { GameMap[ Snake[0].x ][ Snake[0].y ] = '@'; Snake[sum].x = x; //新增加的蛇身为蛇头后面的那个 Snake[sum].y = y; Snake[sum].now = Snake[0].now; GameMap[ Snake[sum].x ][ Snake[sum].y ] = '#'; sum++; Create_Food(); //食物吃完了马上再产生一个食物 } else over = 1; }。

2.贪吃蛇游戏

// Snake.h : main header file for the SNAKE application

//

#if !defined(AFX_SNAKE_H__2EBD7F04_452B_11D7_B6CA_0050BAE90E03__INCLUDED_)

#define AFX_SNAKE_H__2EBD7F04_452B_11D7_B6CA_0050BAE90E03__INCLUDED_

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#ifndef __AFXWIN_H__

#error include 'stdafx.h' before including this file for PCH

#endif

#include "resource.h" // main symbols

/////////////////////////////////////////////////////////////////////////////

// CSnakeApp:

// See Snake.cpp for the implementation of this class

//

class CSnakeApp : public CWinApp

{

public:

CSnakeApp();

// Overrides

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CSnakeApp)

public:

virtual BOOL InitInstance();

//}}AFX_VIRTUAL

// Implementation

//{{AFX_MSG(CSnakeApp)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}

// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_SNAKE_H__2EBD7F04_452B_11D7_B6CA_0050BAE90E03__INCLUDED_)

这只是个一部分!以前我写过的!你还要写出相对的main和frm等等!

3.C语言课程设计 贪吃蛇

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

2.2程序整体设计说明一个游戏要有开始部分,运行部分,结束部分(实际上开始部分与运行部分是一体的)。2.2.1设计思路这个程序的关键是表示蛇的图形以及蛇的移动。

用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。

如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时由于没有庆平的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来社会多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现和消失也是画矩形块和覆盖矩形块2.2.2数据结构设计及用法说明 开始部分:游戏是运行在图形模式下的,所以第一步一定是初始化图形模式,接着要有开始的界面,就像书有封面一样,我设置了一个游戏的标题画面,除了游戏标题画面我还设置了一个欢迎画面。

标题画面以后,还要为游戏的运行部分作初始化,包括绘制游戏运行时的背景,对游戏某些重 要变量的初始化。运行部分:作为游戏的核心部分,这里包括的函数比较多,也就是模块比较多,首先让我模拟一下贪吃蛇的游戏模式:某个世界上突然出现一条蛇,它很短,它的运动神经异常,它没法停止自己的多动症在它的世界里就只有食物,它很饿,也很贪吃;同样在不明原因的情况下,食物从天而降,可惜的是没有落到嘴边;饥饿的主人公,不管它有没有毒,也不问食物的来历,径直向食物爬去;它吃到食物啦,它超出想象的同化能力让食物很快的成为自己身体的一部分,它的身子变长啦。

当它吃到第一颗食物时,上帝有给它第二颗,于是它吃了第二颗,于是又变长了,于是又有第三颗……它的身子是一直的加长,它不管自己过长身体的麻烦——转身不便,继续吃下去,现在它是直接把巴张大,好让食物有个绿色通道。但是在某天的下午,它咬到了自己,它才想起自己是一条毒蛇,于是晕死过去(不是毒死);又或者它往食物冲锋的时候,它失去控制,撞到了墙上。

第一轮循环:第一步,出现食物;第二步,蛇不停运动;第三步,检查蛇是撞到自己或墙壁;由第四步起游戏有两条支线(A、B):A :第四步,蛇没有碰到自己或墙壁,蛇继续前进,绘制蛇的动作;第五步,判断蛇是否吃到食物,如果蛇吃到食物,身子变长,原来的食物消失;第六步,让玩家输入控制指令,让蛇在下一轮循环的第二步改变运动方向;第七步,第二轮循环的第一步,重复第一轮的步骤;B:第四步,蛇碰到自己或墙壁,终止游戏。结束部分:游戏结束时,显示“GAME OVER”,已经是约定俗成的规律了,我的游戏也不例外。

除了游戏结束画面外,我还设置了一个游戏退出画面,“善始善终”嘛。有了上述的大致划分,我把整个程序划分成(13+2)个模块(其实就是函数)2.2.3程序结构(流程图)图2.1流程图依据所需要处理的任务要求,规划输入数据和输出结果,决定存放数据的数据结构。

C语言中数据结构集中体现在数据类型上,因此在进行C语言程序设计时,应统筹规划程序中所使用的变量,数组,指针等,以及它们的类型等。这点是很重要的,如果在此期间选择不合适的变量或者数组,将来修改就十分困难。

现在分析一下贪吃蛇游戏中的元素,继而得出与它们对应的在程序中的描述:蛇:基本描述:长度,颜色,位置。对应数据与数据类型:长度—虽然可以用坐标表示,但是这样的话,运算量将很大,所以换算成较大的单位—节数,以固定长度的每节描述;坐标--整型;颜色--整型; 位置--X,Y坐标。

增加的描述:蛇运动的方向,蛇的生命。对应数据与数据类型:这些描述是为了与程序的按键的输入部分与判断游戏结束部分相联系而设的。

方向只有四个方向:上下左右。可以设置与之对应的四个整型数:3、4、2、1。

生命就只有两种情况:死或生,对应0或1。食物: 基本描述:颜色,位置。

对应数据与数据类型:由于颜色设成固定的,所以不再讨论。位置—X、Y坐标。

增加的描述:食物的存在。对应数据与数据类型:这是为了避免重复出现食物而设置的,与绘制食物的函数有联系。

只有两个值:0或1(没有食物或有食物)其他的元素:墙,由于它在显示上是作为背景而存在的,所以并没有什么说明实际的墙壁就是四条直线组成的边框,由坐标描述。还需要的变量:键盘键入的键值(作为全局变量,整型);经常要使用的循环变量;自定义的填充图案;说明文字的字符数组;游戏的记分;游戏的速度(蛇的速度)。

图2.2蛇的不停运动的关键算法的流程图2.2.4各模块的功能及程序说明主要模。

4.c语言实训贪吃蛇报告书

《高级语言程序设计》课程设计 实验报告

题目:贪吃蛇

专业:计算机

班级: 软件

姓名:

成绩:

指导教师:

完成日期:2008年09月23日

一、目的

1. 进一步掌握和利用C语言进行程设计的能力;

2、进一步理解和运用结构化程设计的思想和方法;

3、初步掌握开发一个小型实用系统的基本方法;

4、学会调试一个较长程序的基本方法;

5、学会利用流程图或N-S图表示算法;

6、掌握书写程设计开发文档的能力(书写课程设计报告);

二、内容与设计思想。

(1).系统功能与分析(填写你所设计的菜单及流程图)。

功能:进行贪食蛇游戏

分析:定义键盘方向键操作,随机数发生器产生食物,并分别利用函数判断贪食蛇的长度及游戏是否成功等.

并能够输入游戏成绩.

(2).数据结构

struct Food

{

int x;/*食物的横坐标*/

int y;/*食物的纵坐标*/

int yes;/*判断是否要出现食物的变量*/

}food;/*食物的结构体*/

struct Snake

}

int x[N];

int y[N];

int node;/*蛇的节数*/

int direction;/*蛇移动方向*/

int life;/* 蛇的生命,0活着,1死亡*/

}snake;

(3).模块设计

根据功能需要:

源文件 :#include <stdio.h>

#include <graphics.h>

#include <stdlib.h>

#include <dos.h>

函数名 功能

void main() 游戏主程序

void Init(void); 图形驱动

void Close(void); 图形结束

void DrawK(void); 开始画面

void GameOver(void); 结束游戏

void GamePlay(void); 玩游戏具体过程

void PrScore(void); 输出成绩

(3)总体设计思想:

利用图形驱动,制作美观的游戏界面.

通过随机函数产生随机数,控制游戏过程食物的出现.

定义键盘操作,控制游戏过程蛇的移动方向.

画出边界,并判断游戏是否结束.

统计游戏过程蛇吃的食物数量,计算并输出游戏成绩.

(4)调试过程: 测试数据及结果,出现了哪些问题,如何修改的

这里,你就写一下你平时出错的地方,与如何修改的.这里我也不好帮你写.

(5)程序有待改进的地方及本次实习的收获和建议

收获:加深认识了程序编译过程的中团队合作的重要性.

提高了自己的编程能力

(7)源程序清单(主要代码)

清单只要将上面的程序全部粘帖就可以了.

5.贪吃蛇 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;/*得分*/ 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;/* 蛇的生命,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[0]=100;snake.y[0]=100;/*蛇头*/ snake.x[1]=110;snake.y[1]=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[i]=snake.x[i-1]; snake.y[i]=snake.y[i-1]; } /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ 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;i595||snake.y[0]<55|| snake.y[0]>455)/*蛇是否撞到墙壁*/ { GameOver();/*本次游戏结束*/ snake.life=1; /*蛇死*/ } if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/ break; if(snake.x[0]==food.x&&snake.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;i

6.用c语言设计贪吃蛇游戏

// #include #include #include 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_cast(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); 。

7.c语言 贪吃蛇 程序

/* 贪吃蛇程序 by champking */#define N 200#include #include #include #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[N]; int y[N]; 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[0] = 100; snake.y[0] = 100;/*蛇头*/ snake.x[1] = 110; snake.y[1] = 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[i] = snake.x[i-1]; snake.y[i] = snake.y[i-1]; } /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ 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; i < snake.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.x && snake.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; i < snake.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); } /*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[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(void){ getch(); closegraph();}。

8.急

#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;/*得分*/ 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;/* 蛇的生命,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[0]=100;snake.y[0]=100;/*蛇头*/ snake.x[1]=110;snake.y[1]=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)/*食物整个坐标大小 需要符合10*10的大小否则社无法迟到*/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[i]=snake.x[i-1]; snake.y[i]=snake.y[i-1]; } /*以蛇头的移动开始让整个身子移动,后一位补上前一位的位置坐标*/ /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ 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;i595||snake.y[0]<55|| snake.y[0]>455)/*死亡条件二:蛇是否撞到墙壁*/ { GameOver();/*本次游戏结束*/ snake.life=1; /*蛇死*/ } if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/ break; /*第三部分:食物设定模块*/if(snake.x[0]==food.x&&snake.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;i

9.急求C语言程序设计—贪吃蛇的总结·

c++

#include <iostream>

using namespace std;

char num[16] = {

'0', '1', '2', '3', '4', '5', '6', '7',

'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'

};

int toint(char &n){

if (n<='9') return (int )(n-48);

else return (int )(n-'a'+10);

}

int main(){

int p = 10, q; \\q是要输入的2 8 16进制

string n = "";

while (cin >> q >> n){

if (n == "0"){

cout << 0 << endl;

return 0;

}

string out = "";

long long sum = 0, p = 1;

for (int i = 0; i<n.size(); i++){

sum += toint(n[n.size()-1-i])*p;

p*=p;

}

while (sum>0) out.insert(0, 1, num[sum%q]), sum/=q;

cout << out << endl;

}

return 0;

win32贪吃蛇c语言毕业论文

转载请注明出处众文网 » win32贪吃蛇c语言毕业论文

资讯

应用电子专业毕业论文题目

阅读(117)

本文主要为您介绍应用电子专业毕业论文题目,内容包括应用电子技术毕业论文有那些选题,求应用电子专业毕业论文题目,应用电子专业什么论文题目推荐呢。电子信息科学与技术专业本科毕业设计(论文)选题指南 电子信息科学与技术专业的学科领域 电

资讯

机电一体化毕业论文总结

阅读(72)

本文主要为您介绍机电一体化毕业论文总结,内容包括求一篇1500字左右的机电一体化论文,机电系毕业论文范文,求一篇1500字左右的机电一体化论文。机电一体化技术发展历程及其趋势 自电子技术一问世,电子技术与机械技术的结合就开始了,只是出现

资讯

郑州大学本科毕业论文格式

阅读(97)

本文主要为您介绍郑州大学本科毕业论文格式,内容包括急需毕业论文的格式,内容我自己写,只要排版格式谢谢了,急需毕业论文的格式,内容我自己写,只要排版格式谢谢了谁有毕业论,毕业论文的一般格式是怎样的。郑州大学毕业论文格式第一页:封面 l

资讯

词汇学毕业论文选题

阅读(79)

本文主要为您介绍词汇学毕业论文选题,内容包括英语词汇学毕业论文写什么题目,英语语言学毕业论文哪些题目好写,关于英语语言学论文常见的题目啊。英语词汇学毕业论文写一些创新的题目,我就写的网络词汇。当时也不懂,导师逼得紧,还是学姐介绍的

资讯

灯立方毕业论文

阅读(80)

本文主要为您介绍灯立方毕业论文,内容包括关于灯的小论文,孔明灯的科学小论文字数在350450之间.要写出孔明灯的原理,为什么,关于灯的小论文。灯如人生,人生如灯,明明灭灭。明亮时,光耀四方,由那灯芯向四周散发着迷人的光晕。于是众人就说:看他多

资讯

毕业论文中的特色和创新怎么写

阅读(88)

本文主要为您介绍毕业论文中的特色和创新怎么写,内容包括如何写毕业论文的特色和创新点,论述论文中作品的特色与创新点怎么写,论文的特色与创新怎么写。选题新颖性。目前大部分的研究都是探讨有关全体上市公司股权激励与公司业绩之间的关系

资讯

电大汉语言文学本科毕业论文题目

阅读(106)

本文主要为您介绍电大汉语言文学本科毕业论文题目,内容包括汉语言文学毕业论文选题,汉语言文学专业毕业论文选题,汉语言文学专业毕业论文的选题。提供一些汉语言文学专业外国文学方面的毕业论文选题。供参考。 外国文学方向 1 、 论古希腊

资讯

毕业论文答辩陈述模板

阅读(82)

本文主要为您介绍毕业论文答辩陈述模板,内容包括论文答辩自述怎么写,毕业答辩自述,毕业答辩时的自述怎么写。论文答辩自述 正式答辩开始,下面是我的部分发言:尊敬的评委老师以及在座的各位同学:大家早上好。我是X级XX专业的XX,很高兴在这里论文

资讯

本科毕业论文数据不实

阅读(85)

本文主要为您介绍本科毕业论文数据不实,内容包括本科毕业论文出来的实验数据不好怎么办,本科毕业论文出来的实验数据不好怎么办,本科毕业论文数据假造会不会被老师发现。题目:题目应简洁、明确、有概括性,字数不宜超过20个字(不同院校可能要求

资讯

毕业论文依法治村

阅读(97)

本文主要为您介绍毕业论文依法治村,内容包括论述大学生如何做依法治国的践行者论文范文,跪求德治与法治论文,3000字,不要把从网上找的贴来,如何推进全面依法治国论文3000。(一)要有全局观念,从整体出发去检查每一部分在论文中所占的地位和作用

资讯

有没有卖毕业论文实物的网站

阅读(109)

本文主要为您介绍有没有卖毕业论文实物的网站,内容包括有没有人买过毕业设计在那家网站买的,毕业论文哪里有卖,有没有好的论文网站。毕业论文哪里有卖的建议:1.计算机毕业设计可不能马虎,最好还是自己动动脑筋,好好的写一写。 2.网上那种免费

资讯

临床骨科毕业论文

阅读(107)

本文主要为您介绍临床骨科毕业论文,内容包括骨科毕业论文题目,骨科专业毕业论文如何写开题报告,骨科毕业论文题目。骨科专业毕业论文可以写相关的实验类课题。当时也是得到了雅文网的大力帮助,写的《骨科患者睡眠状况调查及影响因素分析》还

资讯

大学商品流通企业会计毕业论文

阅读(92)

本文主要为您介绍大学商品流通企业会计毕业论文,内容包括论企业会计与预算会计的论文3000字的2篇,论企业会计与预算会计的论文3000字的2篇,《商品流通企业会计》。预算会计与企业会计的区别预算会计预算会计是以货币为主要计量单位,对各级政

资讯

计算机毕业论文结束语

阅读(115)

本文主要为您介绍计算机毕业论文结束语,内容包括论文的结束语该怎么写,毕业论文结语都写什么,毕业论文结束语、致谢词(通用版)。论文的结束语和致谢怎么写? 悬赏分:100 - 解决时间:2008-5-15 16:49结束语 学生在结束语中,以精练的文字,对在毕业论

资讯

应用电子专业毕业论文题目

阅读(117)

本文主要为您介绍应用电子专业毕业论文题目,内容包括应用电子技术毕业论文有那些选题,求应用电子专业毕业论文题目,应用电子专业什么论文题目推荐呢。电子信息科学与技术专业本科毕业设计(论文)选题指南 电子信息科学与技术专业的学科领域 电

资讯

机电一体化毕业论文总结

阅读(72)

本文主要为您介绍机电一体化毕业论文总结,内容包括求一篇1500字左右的机电一体化论文,机电系毕业论文范文,求一篇1500字左右的机电一体化论文。机电一体化技术发展历程及其趋势 自电子技术一问世,电子技术与机械技术的结合就开始了,只是出现

资讯

郑州大学本科毕业论文格式

阅读(97)

本文主要为您介绍郑州大学本科毕业论文格式,内容包括急需毕业论文的格式,内容我自己写,只要排版格式谢谢了,急需毕业论文的格式,内容我自己写,只要排版格式谢谢了谁有毕业论,毕业论文的一般格式是怎样的。郑州大学毕业论文格式第一页:封面 l

资讯

词汇学毕业论文选题

阅读(79)

本文主要为您介绍词汇学毕业论文选题,内容包括英语词汇学毕业论文写什么题目,英语语言学毕业论文哪些题目好写,关于英语语言学论文常见的题目啊。英语词汇学毕业论文写一些创新的题目,我就写的网络词汇。当时也不懂,导师逼得紧,还是学姐介绍的

资讯

灯立方毕业论文

阅读(80)

本文主要为您介绍灯立方毕业论文,内容包括关于灯的小论文,孔明灯的科学小论文字数在350450之间.要写出孔明灯的原理,为什么,关于灯的小论文。灯如人生,人生如灯,明明灭灭。明亮时,光耀四方,由那灯芯向四周散发着迷人的光晕。于是众人就说:看他多

资讯

毕业论文中的特色和创新怎么写

阅读(88)

本文主要为您介绍毕业论文中的特色和创新怎么写,内容包括如何写毕业论文的特色和创新点,论述论文中作品的特色与创新点怎么写,论文的特色与创新怎么写。选题新颖性。目前大部分的研究都是探讨有关全体上市公司股权激励与公司业绩之间的关系

资讯

电大汉语言文学本科毕业论文题目

阅读(106)

本文主要为您介绍电大汉语言文学本科毕业论文题目,内容包括汉语言文学毕业论文选题,汉语言文学专业毕业论文选题,汉语言文学专业毕业论文的选题。提供一些汉语言文学专业外国文学方面的毕业论文选题。供参考。 外国文学方向 1 、 论古希腊

资讯

2015毕业论文用几号字

阅读(73)

本文主要为您介绍2015毕业论文用几号字,内容包括毕业论文的所有的字号要求是什么,论文要用几号字体,大学论文一般用几号字体。中文摘要中文摘要标题:居中,4号宋体加粗摘要正文:小4号宋体字,限一页关键词:3-5个,中间用“逗号”分开,小4号宋体加粗2