java编写的贪吃蛇游戏源码
贪吃蛇游戏源代码(C++)

贪吃蛇游戏源代码(C++)#include <windows.h>#include <stdlib.h>#include <conio.h>#include <time.h>#include <cstring>#include <cstdio>#include <iostream>#define N 22using namespace std;int gameover;int x1, y1; // 随机出米int x,y;long start;//===================================== ==//类的实现与应用initialize//===================================== ==//下面定义贪吃蛇的坐标类class snake_position{public:int x,y; //x表示行,y表示列snake_position(){};void initialize(int &);//坐标初始化};snake_position position[(N-2)*(N-2)+1]; //定义贪吃蛇坐标类数组,有(N-2)*(N-2)个坐标void snake_position::initialize(int &j){x = 1;y = j;}//下面定义贪吃蛇的棋盘图class snake_map{private:char s[N][N];//定义贪吃蛇棋盘,包括墙壁。
int grade, length;int gamespeed; //前进时间间隔char direction; // 初始情况下,向右运动int head,tail;int score;bool gameauto;public:snake_map(int h=4,int t=1,int l=4,char d=77,int s=0):length(l),direction(d),head(h),tail(t),score(s){}void initialize(); //初始化函数void show_game();int updata_game();void setpoint();void getgrade();void display();};//定义初始化函数,将贪吃蛇的棋盘图进行初始化void snake_map::initialize(){int i,j;for(i=1;i<=3;i++)s[1][i] = '*';s[1][4] = '#';for(i=1;i<=N-2;i++)for(j=1;j<=N-2;j++)s[i][j]=' '; // 初始化贪吃蛇棋盘中间空白部分for(i=0;i<=N-1;i++)s[0][i] = s[N-1][i] = '-'; //初始化贪吃蛇棋盘上下墙壁for(i=1;i<=N-2;i++)s[i][0] = s[i][N-1] = '|'; //初始化贪吃蛇棋盘左右墙壁}//===================================== =======//输出贪吃蛇棋盘信息void snake_map::show_game(){system("cls"); // 清屏int i,j;cout << endl;for(i=0;i<N;i++){cout << '\t';for(j=0;j<N;j++)cout<<s[i][j]<<' '; // 输出贪吃蛇棋盘if(i==2) cout << "\t等级:" << grade;if(i==6) cout << "\t速度:" << gamespeed;if(i==10) cout << "\t得分:" << score << "分" ;if(i==14) cout << "\t暂停:按一下空格键" ;if(i==18) cout << "\t继续:按两下空格键" ;cout<<endl;}}//输入选择等级void snake_map::getgrade(){cin>>grade;while( grade>7 || grade<1 ){cout << "请输入数字1-7选择等级,输入其他数字无效" << endl;cin >> grade;}switch(grade){case 1: gamespeed = 1000;gameauto = 0;break;case 2: gamespeed = 800;gameauto = 0;break;case 3: gamespeed = 600;gameauto = 0;break;case 4: gamespeed = 400;gameauto = 0;break;case 5: gamespeed = 200;gameauto = 0;break;case 6: gamespeed = 100;gameauto = 0;break;case 7: grade = 1;gamespeed = 1000;gameauto = 1;break; }}//输出等级,得分情况以及称号void snake_map::display(){cout << "\n\t\t\t\t等级:" << grade;cout << "\n\n\n\t\t\t\t速度:" << gamespeed;cout << "\n\n\n\t\t\t\t得分:" << score << "分" ;}//随机产生米void snake_map::setpoint(){srand(time(0));do{x1 = rand() % (N-2) + 1;y1 = rand() % (N-2) + 1;}while(s[x1][y1]!=' ');s[x1][y1]='*';}char key;int snake_map::updata_game(){gameover = 1;key = direction;start = clock();while((gameover=(clock()-start<=gamespeed))&&!kbhit()); //如果有键按下或时间超过自动前进时间间隔则终止循环if(gameover){getch();key = getch();}if(key == ' '){while(getch()!=' '){};//这里实现的是按空格键暂停,按空格键继续的功能,但不知为何原因,需要按两下空格才能继续。
使用Java制作贪吃蛇游戏

【 关键词】 J a v a ; E c l i p s e ; “ 贪吃 蛇” 游戏
近年来 . J a v a 作为一种新的编程语言 。 以其 简单性 、 可移植性 和平 i f ( g a me O v e r ) { 台无 关性等优点 . 得到 了广泛 地应用 . 特别是 J a v a与万维 网的完美结 la f g = f a l s e ; 合. 使其成 为网络 编程 和嵌入式编程领域 的首选编程语言 。 E c l i p s e 是 】 个 开放源代 码的 、 基于 J a y a 的可扩展开发平 台 . 同时它也是是著名 的跨平 台的 自由集 成开发环境 . 它 以其友 好的开发界 面、 强大 的组 件 支持等优点 . 得到广大程序员 的接受 和认可 。 J 贪吃蛇是 人们手 机中是一个很 常见 的一个 经典小游戏 . 人们对 它 } 并不陌生 . 在 紧张的现实生活 中给人们带来 了不少的乐趣 . 编写这个 通过在循环体 中设置每休眠 2 0 0毫秒则重画一次 界面 . 使 得界面 不断更新 . 当蛇移动时产生一个动画 的效果 。 贪吃蛇小游戏能让人 们在业余 时间里适 当的放松 . 保持好 的心态 。 在这个程序 中我采用 了 J a v a中 的图形 用户界面技术 .同时 引入 3 ) 绘 制 游 戏 界 面 了线 程来 编写。本次设计主要是对我之前所学 J a v a 知识 的一个巩 固 , p u b l i c v o i d p a i n t ( G r a p h i c s { 不仅 提高了我综合运 用以前 所学知识 的能力 . 同时也锻炼 了我 的实际 C o l o r c = g . g e t C o l o r 0 ; 动手 能力 整个游戏代码 简单易懂 . 用户在娱 乐的同时也可 以简单 的 g . s e t C o l o r ( C o l o r . c y a n ) ; 看一 下代码 . 有助 于初涉 J a v a者语 言水平 的提高。 g . i f l l R e c t ( O , 0 , RO WS B L OC K _ S I Z E, C O L S B L O C K _ S I Z E ) ; 贪吃蛇 的核心算法是如何实现移动和吃掉食 物 . 在当前运动方 向 g . s e t C o l o r ( C o l o r . b l a c k ) ; 上头指针所指的位置之前 添加一个节 点 , 然后删 除尾节 点 , 最后把链 f o r ( i n t i = l ; i < R O WS ; i + + ) { 表中的所有 节点依次 画出来 . 这样就可 以达 到移动的效果 。对是否吃 g . d r a w L i n e ( 0 , B L O C K _ S I Z E i , R O WS B L O C K _ S I Z E , OCK S 到食 物, 需要对 蛇和食物进行 碰撞检 测 . 检测 未碰撞 在一起则 只需要 BL I Z E* i ) ; 执行移 动操作 . 碰撞在一起时表示吃到食物 。 则 只需把食 物人队即可 , ) 即在 蛇的节 点链 表上再添加 一个节 点 , 从而达到身体增长 的效果 。 f o r ( i n t i = 1 ; i < C O L S ; i + + ) { 本次设计 的重 点之处在于 编程思想 的形 成 . 设计 图像 界面 . 产生 g . d r a w L i n e( i B L O C K _ S I Z E , 0 , B L O C K _ S I Z E i , C OL S 随机食 物及其 位置 。 难点在于程序编写中 , 整个程序框架的架构。 这就 BL OCK S I Z E ) ; 要求 我们不仅要对这个游戏 的玩 法特别 熟悉 . 而且还要熟 练掌握 J a v a } , , 每次重 画时 . 判 断蛇是否 吃到蛋 语言 。 实现贪 吃蛇的四个类模块 , 分别为游戏界 面 、 蛇、 食物和方 向。其 s . e a t ( e ) ; , 份 别 把 蛇 和 食 物 画 出来 具体设计 如下 :
贪吃蛇游戏概要设计说明书

概要设计说明书1.引言1.1编写目的在分析《贪吃蛇游戏的需求分析说明》的基础上,我们对该系统做了概要设计,主要是基于以下目的编写此说明书:1.对系统概要设计的的阶段任务成果形成文档,以便阶段验收、评审,最终的阶段验收。
2.对需求阶段的文档再次确认过程,对前一阶段的需求不充分的地方或者有错误的地方进行修改。
3.明确整个系统的功能框架和数据结构,为下一阶段的详细设计、编码、测试提供参考依据。
4.明确编码规范和命名规范,统一程序界面。
预期读者:详细设计人员、概要设计评审小组、研究院领导。
1.2 背景系统名称:贪吃蛇游戏任务提出者:手机策划人员开发者:技术人员用户:NOKIA手机用户运行该软件机器:NOKIA手机1.3 定义1.节:一条蛇可以看成由许多正方形的“小格子”拼凑成,称作节。
节是蛇身上最小的单位。
2.链表:用来保存每一段的状态,链表的元素单位是节。
且链表的第一个元素表示蛇的头部。
3.坐标系:以左上角那点为(0,0),向右则x递增,向下则y递增。
1.4 参考资料张海藩:《软件工程导论》第五版清华大学出版社肖刚等:《实用软件文档写作》2总体设计2.1需求规定2.1.1输入、输出输入:操作选择、级别输出:时间、分数2.1.2 功能要求本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的开始、暂停、退出等功能,分为:游戏主界面模块、游戏控制模块两个模块。
2.1.3 性能要求本游戏在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。
游戏主界面应该力求美观,赏心悦目。
游戏控制模块应做到易懂、易操作,而且准确率高,不易出错。
2.2运行环境本次设计的系统环境及工具:运行环境:WindowsXP编程语言:Java使用工具:Eclipse2.3 基本设计概念和处理流程2.3.1基本设计概念如下:程序关键在于表示蛇的图形及蛇的移动。
Python贪吃蛇游戏编写代码

Python贪吃蛇游戏编写代码最近在学Python,想做点什么来练练⼿,命令⾏的贪吃蛇⼀般是C的练⼿项⽬,但是⼀时之间找不到别的,就先做个贪吃蛇来练练简单的语法。
由于Python监听键盘很⿇烦,没有C语⾔的kbhit(),所以这条贪吃蛇不会⾃⼰动,运⾏效果如下:要求:⽤#表⽰边框,⽤*表⽰⾷物,o表⽰蛇的⾝体,O表⽰蛇头,使⽤wsad来移动Python版本:3.6.1系统环境:Win10类: board:棋盘,也就是游戏区域 snake:贪吃蛇,通过记录⾝体每个点来记录蛇的状态 game:游戏类 本来还想要个food类的,但是food只需要⼀个坐标,和⼀个新建,所以⼲脆使⽤list来保存坐标,新建food放在game⾥⾯,从逻辑上也没有太⼤问题源码:# Write By Guobao# 2017/4//7## 贪吃蛇# ⽤#做边界,*做⾷物,o做⾝体和头部# python 3.6.1import copyimport randomimport osimport msvcrt# the board class, used to put everythingclass board:__points =[]def __init__(self):self.__points.clear()for i in range(22):line = []if i == 0 or i == 21:for j in range(22):line.append('#')else:line.append('#')for j in range(20):line.append(' ')line.append('#')self.__points.append(line)def getPoint(self, location):return self.__points[location[0]][location[1]]def clear(self):self.__points.clear()for i in range(22):line = []if i == 0 or i == 21:for j in range(22):line.append('#')else:line.append('#')for j in range(20):line.append(' ')line.append('#')self.__points.append(line)def put_snake(self, snake_locations):# clear the boardself.clear()# put the snake pointsfor x in snake_locations:self.__points[x[0]][x[1]] = 'o'# the headx = snake_locations[len(snake_locations) - 1]self.__points[x[0]][x[1]] = 'O'def put_food(self, food_location):self.__points[food_location[0]][food_location[1]] = '*' def show(self):os.system("cls")for i in range(22):for j in range(22):print(self.__points[i][j], end='')print()# the snake classclass snake:__points = []def __init__(self):for i in range(1, 6):self.__points.append([1, i])def getPoints(self):return self.__points# move to the next position# give the next headdef move(self, next_head):self.__points.pop(0)self.__points.append(next_head)# eat the food# give the next headdef eat(self, next_head):self.__points.append(next_head)# calc the next state# and return the directiondef next_head(self, direction='default'):# need to change the value, so copy ithead = copy.deepcopy(self.__points[len(self.__points) - 1])# calc the "default" directionif direction == 'default':neck = self.__points[len(self.__points) - 2]if neck[0] > head[0]:direction = 'up'elif neck[0] < head[0]:direction = 'down'elif neck[1] > head[1]:direction = 'left'elif neck[1] < head[1]:direction = 'right'if direction == 'up':head[0] = head[0] - 1elif direction == 'down':head[0] = head[0] + 1elif direction == 'left':head[1] = head[1] - 1elif direction == 'right':head[1] = head[1] + 1return head# the gameclass game:board = board()snake = snake()food = []count = 0def __init__(self):self.new_food()self.board.clear()self.board.put_snake(self.snake.getPoints())self.board.put_food(self.food)def new_food(self):while 1:line = random.randint(1, 20)column = random.randint(1, 20)if self.board.getPoint([column, line]) == ' ':self.food = [column, line]returndef show(self):self.board.clear()self.board.put_snake(self.snake.getPoints())self.board.put_food(self.food)self.board.show()def run(self):self.board.show()# the 'w a s d' are the directionsoperation_dict = {b'w': 'up', b'W': 'up', b's': 'down', b'S': 'down', b'a': 'left', b'A': 'left', b'd': 'right', b'D': 'right'} op = msvcrt.getch()while op != b'q':if op not in operation_dict:op = msvcrt.getch()else:new_head = self.snake.next_head(operation_dict[op])# get the foodif self.board.getPoint(new_head) == '*':self.snake.eat(new_head)self.count = self.count + 1if self.count >= 15:self.show()print("Good Job")breakelse:self.new_food()self.show()# 反向⼀Q⽇神仙elif new_head == self.snake.getPoints()[len(self.snake.getPoints()) - 2]:pass# rush the wallelif self.board.getPoint(new_head) == '#' or self.board.getPoint(new_head) == 'o':print('GG')break# normal moveelse:self.snake.move(new_head)self.show()op = msvcrt.getch()game().run()笔记: 1.Python 没有Switch case语句,可以利⽤dirt来实现 2.Python的=号是复制,复制引⽤,深复制需要使⽤copy的deepcopy()函数来实现 3.即使在成员函数内,也需要使⽤self来访问成员变量,这和C++、JAVA很不⼀样更多关于python游戏的精彩⽂章请点击查看以下专题:更多有趣的经典⼩游戏实现专题,分享给⼤家:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
贪吃蛇程序文档

1.需求分析1.1问题的描述本程序主要是一个交互式的游戏程序,通过玩家的键盘上下左右键控制贪吃蛇的运动方向。
程序会根据您按下的键判断贪吃蛇走向。
这个程序的关键是表示蛇的图形以及蛇的移动。
用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块。
移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。
如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时由于没有清屏的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来社会多一节身体,所以将蛇的最后一节用背景色覆盖。
食物的出现和消失也是画圆形和覆盖圆形。
1.2基本要求应用Visual C++的MFC进行可视化编程,完成一个贪吃蛇小程序。
程序包含snake.EXE可执行文件和所有的可编译程序源码;能够实行游戏的开始、结束、得分和计时;屏幕上能够显示游戏规则和游戏的注意事项。
2.概要设计2.1数据结构数据结构是指相互之间存在一定关系的数据元素的集合。
按照视点的不同,数据结构分为逻辑结构和存储结构。
数据的逻辑结构(logical structure)是指数据元素之间逻辑关系的整体。
所谓逻辑关系是指数据元素之间的关联方式或邻接关系。
根据数据元素之间逻辑关系的不同,数据结构分为四类:集合;线性结构;树结构;图结构。
数据的逻辑结构属于用户视图,是面向问题的,反映了数据内部的构成方式。
为了区别于数据的存储结构,常常将数据的逻辑结构称为数据结构。
数据的存储结构(storage structure)又称为物理结构,是数据及其逻辑结构在计算机中的表示,换言之,存储结构除了数据元素之外,必须隐式或显示地存储数据元素之间的逻辑关系。
通常有两种存储结构:顺序存储结构和链接存储结构[1]。
贪吃蛇程序中的重要代码如下:动态数组:CArray<CPoint,CPoint> m_aBody // 保存蛇身点类:CPoint m_pAim / /保存一个食物目标的坐标函数:void CSnakeView::IniAim() //随机函数生成食物的X 和Y坐标voidCSnakeView::IniGame()//改函数对游戏初始化定义游戏的初始状态void CSnakeView::ReDisplay(CPoint pPoint)//刷新游戏区域中pPoint处的一个小方格void CSnakeView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) //判断键盘按钮事件CView::OnTimer(nIDEvent) //计时器函数来重画屏幕程序的功能是实现对贪吃蛇游戏的开始,如下图所示2.3各模块之间的调用关系及算法设计用流程图示出程序的主要控制流程和处理流程,其图形如下:3 详细设计构思如下:首先,设计者考虑设计一个可以游动的蛇。
贪吃蛇游戏设计

(此文档为word格式,下载后您可任意编辑修改!)题目贪吃蛇游戏设计所在学院数学与计算机科学学院完成地点陕西理工学院2015年05月22日贪吃蛇游戏设计作者:代燕子[摘要]伴随着科学技术的发展,人们都渴望在不工作的时候有一些娱乐活动,而贪吃蛇这一款游戏正好符合大众的心理。
所以,为了迎合许多用户的需求,才开发了这款叫做贪吃蛇的小游戏,并且这款小游戏适合各阶层人士,此外它还具有很强的娱乐性和交互性。
这款游戏之所以叫贪吃蛇,其真正用意并不是告诉人们要贪心,它所传递的精神是人们只有不断努力地向前才能得到自己想要的,食物就像现在社会存在的机会,而人们只有找好自己的目标才能成功。
尽管现在市面上存在的游戏版本很多,可是贪吃蛇的市场还是很大的。
原因就在与它能引人入深,爱不释手。
随着游戏速度的逐渐加快,其刺激性也更强。
可以说该游戏的优势不仅在于它的简单易行,而且在于它很快顺利的运行。
对于那些在外忙忙碌碌的人们,想让他们花费大量的时间在大型游戏上显然是不可能的,但是小游戏却刚好能够迎合他们的需求。
论文首先简单介绍了开发工具,然后从需求分析、概要设计、详细设计与实现等方面介绍了贪吃蛇游戏的设计与实现过程,最后给出了贪吃蛇的运行与测试情况。
[关键词]贪吃蛇;C语言;C++语言;函数;游戏Design of gluttonous snake gameAuthor :Dai YanZi( Grade11,Class1,Information and computing science Major,Mathematics and Computing Science Dept, Sh Tutor: Quan ShuangYan[Abstract] With the development of science and technology ,many people are eager to they do not need to work ,and gluttonous snake game cater to the psychology of the masses exactly .In order to cater to the demands of many users, we develop the little game called gluttonous snake .what’s more, the game is not only suitable for people from all works of life, but it .The reason why the game called gluttonous snake is not that it asks us to be greedy but to do our best to work order to get what we want.The food that the snake eats just like opportunity and We only goals to succeed. Although there are many of version of the game on the market ,but the market of the game is still very large .The reason is that it does not make us to put it down. With the gradual speed up the game speed, the irritation is also stronger. The advantage of this game can be said is that it's not only easy, but also that it will soon run smoothly. For those people outside the busy, want them to spend a lot of time on the big game is obviously impossible, but the small game is just to cater to their needs.Paper first introduces the development tools, and then from the demand analysis, general design, detailed design and implementation of the snake game were introduced f rom the aspects such as design and implementation process, finally presented the status of operation and testing of the snake.[Keyword] gluttonous snake; C language ; function; game目录前言 (1)第一章概述 (3)1.1中国手机游戏产业现状 (3)1.2中国手机游戏的产业局势及其种类的多元化 (3)1.3中国手机游戏的未来展望 (4)第二章开发工具的简介 (6)2.1 Visual C++6.0简介 (6)2.2 Visual C++6.0安装 (6)2.3 Visual C++ 6.0开发过程 (7)第三章需求分析 (9)3.1可行性分析 (9)3.2 功能性分析 (9)第四章概要设计 (11)4.1功能介绍 (11)4.2概要设计图 (11)第五章详细设计 (13)5.1程序设计分析 (13)5.2主要函数 (14)5.3主要代码 (14)5.4其他函数代码 (23)第六章运行与测试 (26)6.1 运行程序 (26)6.2程序的调试与测试 (27)第七章结论 (28)致谢 (29)参考文献 (30)前言C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合需求比较广泛,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。
使用Python写一个贪吃蛇游戏实例代码
使⽤Python写⼀个贪吃蛇游戏实例代码我在程序中加⼊了分数显⽰,三种特殊⾷物,将贪吃蛇的游戏逻辑写到了SnakeGame的类中,⽽不是在Snake类中。
特殊⾷物:1.绿⾊:普通,吃了增加体型2.红⾊:吃了减少体型3.⾦⾊:吃了回到最初体型4.变⾊⾷物:吃了会根据⾷物颜⾊改变蛇的颜⾊#coding=UTF-8from Tkinter import *from random import randintimport tkMessageBoxclass Grid(object):def __init__(self, master=None,height=16, width=24, offset=10, grid_width=50, bg="#808080"):self.height = heightself.width = widthself.offset = offsetself.grid_width = grid_widthself.bg = bgself.canvas = Canvas(master, width=self.width*self.grid_width+2*self.offset, height=self.height*self.grid_width+2*self.offset, bg=self.bg)self.canvas.pack(side=RIGHT, fill=Y)def draw(self, pos, color, ):x = pos[0] * self.grid_width + self.offsety = pos[1] * self.grid_width + self.offset#outline属性要与⽹格的背景⾊(self.bg)相同,要不然会很丑self.canvas.create_rectangle(x, y, x + self.grid_width, y + self.grid_width, fill=color, outline=self.bg)class Food(object):def __init__(self, grid, color = "#23D978"):self.grid = gridself.color = colorself.set_pos()self.type = 1def set_pos(self):x = randint(0, self.grid.width - 1)y = randint(0, self.grid.height - 1)self.pos = (x, y)def display(self):self.grid.draw(self.pos, self.color)class Snake(object):def __init__(self, grid, color = "#000000"):self.grid = gridself.color = colorself.body = [(8, 11), (8, 12), (8, 13)]self.direction = "Up"for i in self.body:self.grid.draw(i, self.color)#这个⽅法⽤于游戏重新开始时初始化贪吃蛇的位置def initial(self):while not len(self.body) == 0:pop = self.body.pop()self.grid.draw(pop, self.grid.bg)self.body = [(8, 11), (8, 12), (8, 13)]self.direction = "Up"self.color = "#000000"for i in self.body:self.grid.draw(i, self.color)#蛇像⼀个指定点移动def move(self, new):self.body.insert(0, new)pop = self.body.pop()self.grid.draw(pop, self.grid.bg)self.grid.draw(new, self.color)#蛇像⼀个指定点移动,并增加长度def add(self ,new):self.body.insert(0, new)self.grid.draw(new, self.color)#蛇吃到了特殊⾷物1,剪短⾃⾝的长度def cut_down(self,new):self.body.insert(0, new)self.grid.draw(new, self.color)for i in range(0,3):pop = self.body.pop()self.grid.draw(pop, self.grid.bg)#蛇吃到了特殊⾷物2,回到最初长度def init(self, new):self.body.insert(0, new)self.grid.draw(new, self.color)while len(self.body) > 3:pop = self.body.pop()self.grid.draw(pop, self.grid.bg)#蛇吃到了特殊⾷物3,改变了⾃⾝的颜⾊,纯属好玩def change(self, new, color):self.color = colorself.body.insert(0, new)for item in self.body:self.grid.draw(item, self.color)class SnakeGame(Frame):def __init__(self, master):Frame.__init__(self, master)self.grid = Grid(master)self.snake = Snake(self.grid)self.food = Food(self.grid)self.gameover = Falseself.score = 0self.status = ['run', 'stop']self.speed = 300self.grid.canvas.bind_all("<KeyRelease>", self.key_release)self.display_food()#⽤于设置变⾊⾷物self.color_c = ("#FFB6C1","#6A5ACD","#0000FF","#F0FFF0","#FFFFE0","#F0F8FF","#EE82EE","#000000","#5FA8D9","#32CD32") self.i = 0#界⾯左侧显⽰分数self.m = StringVar()self.ft1 = ('Fixdsys', 40, "bold")self.m1 = Message(master, textvariable=self.m, aspect=5000, font=self.ft1, bg="#696969")self.m1.pack(side=LEFT, fill=Y)self.m.set("Score:"+str(self.score))#这个⽅法⽤于游戏重新开始时初始化游戏def initial(self):self.gameover = Falseself.score = 0self.m.set("Score:"+str(self.score))self.snake.initial()#type1:普通⾷物 type2:减少2 type3:⼤乐透,回到最初状态 type4:吃了会变⾊def display_food(self):self.food.color = "#23D978"self.food.type = 1if randint(0, 40) == 5:self.food.color = "#FFD700"self.food.type = 3while (self.food.pos in self.snake.body):self.food.set_pos()self.food.display()elif randint(0, 4) == 2:self.food.color = "#EE82EE"self.food.type = 4while (self.food.pos in self.snake.body):self.food.set_pos()self.food.display()elif len(self.snake.body) > 10 and randint(0, 16) == 5:self.food.color = "#BC8F8F"self.food.type = 2while (self.food.pos in self.snake.body):self.food.set_pos()self.food.display()else:while (self.food.pos in self.snake.body):self.food.set_pos()self.food.display()def key_release(self, event):key = event.keysymkey_dict = {"Up": "Down", "Down": "Up", "Left": "Right", "Right": "Left"}#蛇不可以像⾃⼰的反⽅向⾛if key_dict.has_key(key) and not key == key_dict[self.snake.direction]:self.snake.direction = keyself.move()elif key == 'p':self.status.reverse()def run(self):#⾸先判断游戏是否暂停if not self.status[0] == 'stop':#判断游戏是否结束if self.gameover == True:message = tkMessageBox.showinfo("Game Over", "your score: %d" % self.score)if message == 'ok':self.initial()if self.food.type == 4:color = self.color_c[self.i]self.i = (self.i+1)%10self.food.color = colorself.food.display()self.move(color)else:self.move()self.after(self.speed, self.run)def move(self, color="#EE82EE"):# 计算蛇下⼀次移动的点head = self.snake.body[0]if self.snake.direction == 'Up':if head[1] - 1 < 0:new = (head[0], 16)else:new = (head[0], head[1] - 1)elif self.snake.direction == 'Down':new = (head[0], (head[1] + 1) % 16)elif self.snake.direction == 'Left':if head[0] - 1 < 0:new = (24, head[1])else:new = (head[0] - 1, head[1])else:new = ((head[0] + 1) % 24, head[1])#撞到⾃⼰,设置游戏结束的标志位,等待下⼀循环if new in self.snake.body:self.gameover=True#吃到⾷物elif new == self.food.pos:if self.food.type == 1:self.snake.add(new)elif self.food.type == 2:self.snake.cut_down(new)elif self.food.type == 4:self.snake.change(new, color)else:self.snake.init(new)self.display_food()self.score = self.score+1self.m.set("Score:" + str(self.score))#什么都没撞到,继续前进else:self.snake.move(new)if __name__ == '__main__':root = Tk()snakegame = SnakeGame(root)snakegame.run()snakegame.mainloop()总结以上所述是⼩编给⼤家介绍的使⽤Python写⼀个贪吃蛇游戏实例代码,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
小游戏贪吃蛇课程设计报告
Java小游戏贪吃蛇课程设计报告
使用键盘事件 监听器实现蛇 的移动和转向
Java小游戏贪吃蛇课程设计报告
通过碰撞检测类实现碰 撞和游戏结束条件
Java小游戏贪吃蛇课程设计报告
使用Java Timer类实现分数和时间的更新
在实现过程中,我们遇到了以下问题和解决方案
在本次课程设计中,我们选择了一个经典的小游戏——贪吃蛇。贪吃蛇是一款简单而有趣 的游戏,玩家需要控制一条蛇在屏幕上移动,吃掉食物并避免撞到墙壁或自己的尾巴 在开始设计之前,我们首先对游戏进行了需求分析。我们需要实现以下功能
Java小游戏贪吃蛇课程设计报告
创建游戏窗口和背景
Java小游戏贪吃蛇课程设计报告
Java小游戏贪吃蛇 课程设计报告
-
1 创建游戏窗口和背景 2 生成蛇和食物 3 实现蛇的移动和转向 4 检测碰撞和游戏结束条件 5 分数和时间的显示 6 使用随机数生成器生成蛇和食物的位置 7 使用键盘事件监听器实现蛇的移动和转向 8 通过碰撞检测类实现碰撞和游戏结束条件
Java小游戏贪吃蛇课程设计报告
分数和时间显示不准确:解决方案:使用Java Timer类定期更新分数和时间,确保它 们与游戏进度同步
Java小游戏贪吃蛇课程设计报告
r
xxxxx
最终,我们成功实现了贪吃蛇游戏的基 本功能,包括创建游戏窗口、生成蛇和 食物、实现蛇的移动和转向、检测碰撞 和游戏结束条件以及分数和时间的显示
同时,我们还优化了游戏的性能和 用户体验,使其更加流畅和有趣
生成蛇和食物
Java小游戏贪吃蛇课程设计报告
Java小游戏贪吃蛇课程设计报告
检测碰撞和游 戏结束条件
Java小游戏贪吃蛇课程设计报告
贪吃蛇的研究与设计完整版
贪吃蛇的研究与设计 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】广东技术师范学院天河学院JAVA程序设计课程设计报告题目:______贪吃蛇的研究与设计____学号: ______班级: ______本软件122班__________小组成员:___林盛东郭威彭更明____指导教师: 郑英姿所属系部: 计算机科学与技术系2014年 4月 25 日贪吃蛇的研究与设计摘要近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。
“贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。
本文基于Java技术和NetBeans开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。
整个游戏程序分为二个功能模块,八个类模块,实现了游戏的开始、暂停、结束。
通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。
本文在介绍Java相关技术和国内外发展现状的基础上,对“贪吃蛇”游戏的整个生命周期的各个开发阶段进行了详细地介绍。
首先,分析了开发本游戏软件的可行性,重点分析本设计所采用的技术的可行性。
其次,从游戏主界面等几方面,分析了本游戏的功能需求;从可使用性和安全性方面分析了属性需求。
然后,进行了游戏的概要设计和详细设计,这也是本文的重点。
概要设计给出二个功能模块的主框架以及八个类模块的函数调用关系;详细设计介绍了Java2标准运行环境的配置,重点给出各个类模块的程序列表,介绍了各个类包含的变量、使用的方法,展示了游戏的界面。
为了保证程序代码的正确性和功能实现的可靠性,本文还介绍了游戏软件的程序调试过程和功能测试结果。
关键词:Java;NetBeans;贪吃蛇;开发流程目录1 引言课题介绍贪吃蛇是世界知名的益智类小游戏,选择这个题目一方面的原因是为了将我们自己的所学知识加以运用;另一方面,虽然很小就接触这个游戏,但是它的制作方法对我们而言还是很神秘的。
VB实现贪吃蛇小游戏
VB实现贪吃蛇小游戏以下为VB实现贪吃蛇小游戏的代码及其详细说明。
```'主程序模块Option ExplicitPrivate WithEvents Snake As SnakeGamePrivate FrameRate As IntegerPrivate FoodColor As LongPrivate SnakeColor As LongPrivate GameOver As BooleanPrivate Sub Form_LoadFrameRate = 100FoodColor = vbGreenSnakeColor = vbBlueGameOver = FalseSet Snake = New SnakeGameSnake.CreateGame FrameRate, FoodColor, SnakeColor Me.ScaleMode = vbPixelsMe.AutoRedraw = TrueEnd SubPrivate Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)If Not GameOver ThenSelect Case KeyCodeCase vbKeyUpSnake.ChangeDirection SnakeDirection.UpCase vbKeyDownSnake.ChangeDirection SnakeDirection.DownCase vbKeyLeftSnake.ChangeDirection SnakeDirection.LeftCase vbKeyRightSnake.ChangeDirection SnakeDirection.RightEnd SelectElseMsgBox "Game Over!"Unload MeEnd IfEnd SubPrivate Sub Form_Paint Snake.DrawGame MeIf GameOver ThenMe.Print "Game Over!"End IfEnd SubPrivate Sub Snake_GameOver GameOver = TrueMe.RefreshEnd SubPrivate Sub Snake_Move Me.RefreshEnd Sub``````'蛇游戏类模块Option ExplicitPublic Enum SnakeDirection Up=0Down = 1Left = 2Right = 3End EnumPrivate Type SnakeSegmentX As LongY As LongEnd TypePrivate Type SnakeFoodX As LongY As LongEnd TypePrivate snake( As SnakeSegmentPrivate food As SnakeFoodPublic Event MovePublic Event GameOverPublic Sub CreateGame(frameRate As Integer, foodColor As Long, snakeColor As Long)ReDim snake(10)snake(0).X = 10snake(0).Y = 10snake(1).X = 10snake(1).Y = 11snake(2).X = 10snake(2).Y = 12food.X = 30food.Y = 20Timer1.Interval = frameRateTimer1.Enabled = TrueMe.BackColor = vbBlackMe.ForeColor = snakeColorMe.ScaleMode = vbPixelsMe.AutoRedraw = FalseDrawGame MeEnd SubPublic Sub ChangeDirection(direction As SnakeDirection) Dim newSegment As SnakeSegmentSelect Case directionCase SnakeDirection.UpIf snake(0).Y > 0 ThennewSegment.X = snake(0).X newSegment.Y = snake(0).Y - 1ElseRaiseEvent GameOverTimer1.Enabled = FalseExit SubEnd IfCase SnakeDirection.DownIf snake(0).Y < Me.ScaleHeight - 1 Then newSegment.X = snake(0).X newSegment.Y = snake(0).Y + 1ElseRaiseEvent GameOverTimer1.Enabled = FalseExit SubEnd IfCase SnakeDirection.LeftIf snake(0).X > 0 ThennewSegment.X = snake(0).X - 1 newSegment.Y = snake(0).YElseRaiseEvent GameOverTimer1.Enabled = FalseExit SubEnd IfCase SnakeDirection.RightIf snake(0).X < Me.ScaleWidth - 1 Then newSegment.X = snake(0).X + 1 newSegment.Y = snake(0).YElseRaiseEvent GameOverTimer1.Enabled = FalseExit SubEnd IfEnd SelectReDim Preserve snake(UBound(snake) + 1)For i = UBound(snake) - 1 To 1 Step -1snake(i) = snake(i - 1)Next isnake(0) = newSegmentCheckCollisionRaiseEvent MoveEnd SubPrivate Sub Timer1_TimerChangeDirection GetRandomDirectionEnd SubPrivate Sub CheckCollisionFor i = 1 To UBound(snake)If snake(0).X = snake(i).X And snake(0).Y = snake(i).Y Then RaiseEvent GameOverTimer1.Enabled = FalseExit SubEnd IfNext iIf snake(0).X = food.X And snake(0).Y = food.Y ThenGenerateFoodEnd IfEnd SubPrivate Sub GenerateFoodDim occupied As BooleanDooccupied = Falsefood.X = Int(Rnd * Me.ScaleWidth)food.Y = Int(Rnd * Me.ScaleHeight)For i = 0 To UBound(snake)If food.X = snake(i).X And food.Y = snake(i).Y Then occupied = TrueExit ForEnd IfNext iLoop Until Not occupiedEnd SubPrivate Function GetRandomDirection( As SnakeDirection Dim rndNum As IntegerrndNum = Int((3 + 1 - 0) * Rnd + 0) Select Case rndNumCase 0GetRandomDirection = SnakeDirection.Up Case 1GetRandomDirection = SnakeDirection.Down Case 2GetRandomDirection = SnakeDirection.Left Case 3GetRandomDirection = SnakeDirection.Right End SelectEnd FunctionPublic Sub DrawGame(Form As Object) Form.ClsFor i = 0 To UBound(snake)Form.PSet (snake(i).X, snake(i).Y)Next i' Draw foodForm.ForeColor = vbGreenForm.PSet (food.X, food.Y)End Sub```以上是使用VB实现贪吃蛇小游戏的代码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、函数程序结构图 注释:
贪吃蛇
Draw reAppear getM setM getN setN paint ScoreCheck .stop getscore setscore processKey Mian 函数 Deadif Tailadd Deltail Headadd Tailadd() Deltail() Headadd draw move eat keyPressed Run Pause Restart go_on isPause setPause install 定义 方向变量L,U,D,R Draw Keypressed Yard Text Snake PaintThread Node KeyMonitor Food Direction 类名 方法名 Map
Draw 二、题目分析 通过分析该程序基本需要以下几个类:Text(Main方法)、Snake(蛇)、Food(食物)、Yard(窗口)、Map(地图)、Node(节点)、PaintThread(线程)、Dir
(方向)、KeyMonitor(键盘监听)。主要实现蛇运动的基本操作和一些事
件反应、游戏分数的记录、暂停、重新开始、更改蛇蛇颜色,蛇的移动速度,地图、死亡模式的改变等功能。 本程序运用Java语言知识,用面向对象的思维设计“贪吃蛇”游戏。
三、结果分析 运行程序出现游戏界面,蛇(Snake)头自动向前移动,用键盘的上(Up)下(Down)左(Left)右(Right)键控制蛇头的移动方向。游戏窗体中在随机位置出现紫色的食物(Food)。
1、每吃一个加5分 2、默认撞墙不死 3、默认速度3 4、默认地图1 5、默认普通蛇身 6、默认30分提升一个速度档次 7、默认每个速度都走完后更换地图并且速度恢复默认,积分归零
功能键: 1、按F1重新开始 2、按空格键暂停/继续 3、按1/2/3/4/5数字键设置蛇的移动速度(逐渐变快) 4、按F2更换地图(3种) 5、按F3普通蛇/彩蛇的切换 6、按F4更换游戏模式(蛇撞到最外围为死亡还是从另一端返回)
该程序初步完成了“贪吃蛇”的游戏雏形,但是缺乏完善。比如:界面效果十分粗糙、屏幕闪烁、缺少声音等。但是,我们通过编写贪吃蛇,能更好的运用面向对象的思维方式了,并学到了许多有用的经验。 四、 附录(程序清单) 1、 Snake.java
import java.awt.Color; import java.awt.Graphics; import java.awt.event.KeyEvent;
public class Snake { Node head = null; Node tail = null; int size = 0; Yard y; Node n = new Node(1, 2, Dir.D);
public Snake(Yard y) { head = n; tail = n; size = 1; this.y = y; for(int i=0;i<3;i++) this.Headadd(); }
public void Tailadd() { Node node = null; switch (tail.dir) { case L : node = new Node(tail.m+1, tail.n, tail.dir); break; case U : node = new Node(tail.m, tail.n+1, tail.dir); break; case R : node = new Node(tail.m-1, tail.n, tail.dir); break; case D : node = new Node(tail.m, tail.n+1, tail.dir); break; } tail.next = node; node.pre = tail; tail = node; size ++;
} public void Deltail() { if (size == 0) return; tail = tail.pre; tail.next = null; }
public void Headadd() { Node node = null; switch (head.dir) { case L: node = new Node(head.m - 1, head.n, head.dir); break; case U: node = new Node(head.m, head.n - 1, head.dir); break; case R: node = new Node(head.m + 1, head.n, head.dir); break; case D: node = new Node(head.m, head.n + 1, head.dir); break; } node.next = head; head.pre = node; head = node; size++; }
public void draw(Graphics g) { if (size <= 0) return; move(); for (Node n = head; n != null; n = n.next) { if(head==n){ g.setColor(Color.BLUE); if(n.dir==Dir.L||n.dir==Dir.R) g.fillOval(n.m*Yard.B_WIDTH, n.n*Yard.B_WIDTH, Yard.B_WIDTH, Yard.B_WIDTH-3); else g.fillOval(n.m*Yard.B_WIDTH, n.n*Yard.B_WIDTH, Yard.B_WIDTH-3, Yard.B_WIDTH); } else n.draw(g); } }
public void Deadif() { switch(Yard.STYLE){ case 2: if (head.m < 0 || head.n < 30/Yard.B_WIDTH || head.m >= (Yard.WIDTH / Yard.B_WIDTH) || head.n >= (Yard.HEIGHT / Yard.B_WIDTH)) { y.stop(); } break; case 1: int cols = Yard.WIDTH / Yard.B_WIDTH; int rows = Yard.HEIGHT / Yard.B_WIDTH; if(head.m < 0) head.m = cols; else if (head.m >= cols) head.m = 0; else if (head.n < 30/Yard.B_WIDTH) head.n = rows; else if (head.n >= rows) head.n = 30/Yard.B_WIDTH; break; } for (Node p = head.next; p != null; p = p.next) { if (head.m == p.m && head.n == p.n) { y.stop(); } } switch (Yard.MAP) { case 1://地图1 break; case 2://地图2 for (int j = 10; j < Yard.WIDTH/Yard.B_WIDTH-10; j ++) { if(head.m==j&&head.n==10) y.stop(); } for (int j = 10; j < Yard.WIDTH/Yard.B_WIDTH-10; j ++) { if(head.m==j&&head.n==20) y.stop(); } break; case 3://地图3 for (int j = 10; j < Yard.WIDTH/Yard.B_WIDTH-10; j ++) { if(head.m==j&&head.n==10) y.stop(); } for (int j = 10; j < Yard.WIDTH/Yard.B_WIDTH-10; j ++) { if(head.m==j&&head.n==20) y.stop(); }
for (int j = 20; j < 26; j ++) { if(head.m==Yard.WIDTH/Yard.B_WIDTH-10&&head.n==j) y.stop(); } for (int j = 5; j < 10; j ++) { if(head.m==10&&head.n==j) y.stop(); } break; default: break; } }
void move() { Yard.MOVECHECK = true; Headadd(); Deltail(); Deadif(); }
public void eat(food e) { if (y.f.getM() == y.s.head.m && y.f.getN() == y.s.head.n){ e.reAppear(); this.Tailadd(); y.setscore(y.getscore() + 5); } }