游戏程序设计报告
石头-剪刀-布游戏课程设计报告
⽯头-剪⼑-布游戏课程设计报告华东交通⼤学课程设计报告书所属课程名称C++语⾔及程序设计题⽬⽯头-剪⼑-布游戏院(系)基础科学学院班级09应⽤化学(⼀)班学号20090810030118 学⽣姓名游斌指导教师杜玲玲辅导教师杜玲玲2010年7 ⽉3 ⽇课程设计(论⽂)任务书基础学院应⽤化学专业09-1班⼀、课程设计(论⽂)题⽬:⽯头-剪⼑-布游戏⼆、课程设计(论⽂)⼯作⾃2010 年 6 ⽉28⽇起⾄ 2010 年7⽉ 2 ⽇⽌三、课程设计(论⽂) 地点:四、课程设计(论⽂)内容要求:1. 本课程设计的⽬的(1)进⼀步巩固和加深对“C++程序设计”课程基本知识的理解和掌握,了解C ++语⾔在项⽬开发中的应⽤。
(2)学习程序设计开发的⼀般⽅法,了解和掌握项⽬开发过程及⽅式,培养正确的设计思想和分析问题、解决问题的能⼒,特别是项⽬设计能⼒。
(3)通过对标准化、规范化⽂档的掌握并查阅有关技术资料等,培养项⽬设计开发能⼒,同时提倡团队合作精神。
2. 课程设计的任务及要求1) 基本要求:(1)对系统功能进⾏需求分析;(2)使⽤Visual C++编译器进⾏程序编译;(3)提出系统的设计⽅案;(4)编写源程序代码并进⾏调试。
2) 创新要求在基本要求达到后,可进⾏创新设计。
3) 课程设计报告撰写及装订要求课程设计报告的撰写要求表述简明,图表准确。
报告按如下内容和顺序⽤A4纸进⾏打印并装订成册。
(1)封⾯采⽤统⼀的课程设计封⾯,并按要求填写好封⾯要求的个⼈信息和选题。
(2)设计任务书(3)评阅书(4)⽬录(5)正⽂(6)主要参考⽂献4) 课程设计评分标准:每⼈按指定题⽬进⾏设计,严禁抄袭,除了出圈游戏,职⼯信息管理和有理数计算三道选题允许3⼈/组,其他各选题2⼈/组。
要求每⼈⾃⼰动⼿编写程序,采取同⼀组同时检查程序及运⾏结果,检查时同组成员每⼈陈述⾃⼰的分⼯,同⼀选题不同组如发现代码完全⼀样,则双⽅都作不及格处理。
贪吃蛇游戏程序设计实验报告
贪吃蛇游戏程序设计实验报告贪吃蛇游戏程序设计实验报告1、引言1.1 文档目的1.2 背景介绍1.3 项目概述2、需求分析2.1 用户需求2.2 功能需求2.3 非功能需求3、总体设计3.1 系统结构3.2 使用的开发工具和技术3.3 程序流程图3.4 数据结构设计4、模块设计4.1 游戏界面模块设计4.2 蛇的移动模块设计4.3 食物模块设计4.4 游戏结束判定模块设计5、开发过程5.1 编码规范5.2 界面设计与实现5.3 功能模块实现5.4 联合测试与整合调试6、测试结果与分析6.1 单元测试6.2 集成测试6.3 性能测试6.4 用户验收测试7、部署与运维7.1 系统环境要求7.2 安装步骤7.3 运行与维护8、问题与解决方案8.1 开发中的问题8.2 解决方案9、结论9.1 实验总结9.2 实现目标9.3 后续改进方向附件:- 源代码文件- 参考文献法律名词及注释:- 版权:保护原创作品的独有权利,防止他人未经授权使用、复制或传播。
- 许可证:授权他人在特定条件下使用受版权保护的作品。
- 商标:用于标识特定产品或服务来源的标识,可以是文字、图形、颜色或声音。
- 专利:通过创造一种新的发明而获得的对该发明的独有权利,防止他人在未获许可的情况下制造、使用或销售该发明。
- 使用条款:规定使用软件、服务或作品的条件和限制。
- 免责声明:声明作者或提供者对使用软件、服务或作品时可能产生的损害不承担责任。
全文结束 \。
游戏程序设计实验设计报告
游戏课程设计报告题目:超级黑白棋班级:11数媒姓名:徐继涛学号:1108040352014年 1 月6日目录一、目的与要求……………………………………………………………………….二、游戏设计方案……………………………………………………………………三、游戏开发平台构建……………………………………………………四、项目设计……………………………………………………………………….五、游戏创新描述……………………………………………………………………六、调试运行与分析…………………………………………………………七、程序清单………………………………………………………………………. 参考文献…………………………………………………………………………...一、游戏设计目的及要求通过游戏程序设计,提高编程兴趣与编程思路,巩固C++语言中所学的知识,合理的运用资料,实现理论与实际相结合。
黑白棋,又叫反棋、奥赛罗棋、苹果棋或翻转棋。
黑白棋在西方和日本很流行。
游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负。
它的游戏规则简单,因此上手很容易,但是它的变化又非常复杂。
有一种说法是:只需要几分钟学会它,却需要一生的时间去精通它。
(1).收集资料,分析课题,分解问题,形成总体设计思路;(2).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;(3).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;(4).完成课程设计报告,并进行答辩(5).黑白棋的棋盘是一个有8*8方格的棋盘。
下棋时将棋下在空格中间,而不是像围棋一样下在交叉点上。
开始时在棋盘正中有两白两黑四个棋子交叉放置。
游戏结束时输出得分。
画出模块枝干图与每个模块的程序流程图。
修改某些代码,改变其外观及功能。
(6).游戏操作应尽量简单。
界面美观,让人看了觉得舒服。
二、游戏设计方案2.1、算法设计:玩游戏过程采用递归算法,控制循环过程,可使游戏重复玩,判断迷宫游戏结束的算法是通过判断人有没有到达终点。
游戏开发报告
游戏开发报告
一、项目概述
随着游戏行业的不断发展,越来越多的玩家开始追寻更加高品质的游戏体验。
此项目旨在打造一款性能优良、玩法丰富、画面精美的游戏,带给玩家全新的游戏体验。
二、项目分工
本项目共涉及到游戏策划、美术设计、程序开发三个方面的工作。
游戏策划:
根据市场调查,确定游戏类型、游戏玩法、游戏关卡设计等内容。
美术设计:
负责游戏UI设计、游戏场景设计、角色设计、特效制作等相关工作。
程序开发:
负责实现游戏策划与美术设计确定的内容,保证游戏正常运行、性能稳定、系统兼容性等要求。
三、技术方案
为了实现游戏的高品质要求,我们选用了Unity3D引擎进行游
戏开发。
同时,我们采用客户端/服务器架构,确保游戏运行流畅,玩家在游戏中的数据可以被持久化保存,且游戏运行中的偏差可
以得到有效地纠正。
四、项目进度
截至目前,我们已经完成了游戏策划部分的工作,完成了UI
设计和游戏场景设计,已经逐步开发出了初步的游戏玩法。
我们
正式开始程序开发的相关工作,并计划在今年年底前完成未来所
有的开发工作。
五、风险与控制
本项目可能面临到技术风险、成本风险和市场风险的挑战。
我
们会通过前期充分的技术调研、保证开发进度和把握市场趋势等
方面的工作,尽力降低风险,并保证项目的顺利进行。
六、总结
在游戏开发的过程中,我们会以玩家的需求为中心,保证游戏品质与玩家体验。
我们将保证本项目按照预定的时间进度、经费预算、质量标准来进行开发。
c语言俄罗斯方块游戏程序设计报告
C语言课程设计报告主标题: C语言课程设计副标题:俄罗斯方块游戏----界面设计姓名:卢文俊指导教师:刘慧院系:信息工程学院专业:计算机科学与技术班级: 11计本(二)班小组成员:卢文俊,齐伟,陈龙提交日期: 2012-6-7俄罗斯方块程序设计报告一、问题描述:要求支持键盘操作和7种不同类型方块的旋转变换,并且界面上显示下一个方块的提示以及当前的玩家的得分,随着游戏的进行,等级越高,游戏难度越大,即方块的下落速度越快,相应的等级,等级越高,消去一行所得到的分数越高,为玩家提供了不同的选择。
二、功能分析:俄罗斯方块游戏需要解决的问题包括:⑴按任意键开始游戏,随机产生方块并自动下移⑵用Esc键退出游戏。
⑶用键变换方块⑷用键和键左右移动方块⑸用键使方块加速下移⑹用空格键使方块直接下移⑺能正确判断满行并消行、计分、定级别⑻能正确计时⑼设定游戏为不同级别,级别越高难度越大重点:*游戏面包的数据结构:二维数组*7种形状方块的数据结构:结构体保存每种形状方块的坐标、颜色三、程序设计:1、程序总体设计结构:首先初始化进入图形模式,进入欢迎界面,玩家按任意进入主菜单界面,按键进入游戏界面,键然后设置新的时钟中断。
开始游戏后,进入该程序最核心的部分——处理和实现进行过程中的各种事件和函数。
在处理中判断游戏是否结束,如果没有结束,则重新开始游戏,否则结束游戏。
详解如下:(1)、游戏方块预览功能。
在游戏过程中,当在游戏底板中出现一个游戏方块时,必须在游戏方块预览区域中出现下一个游戏方块,这样有利于游戏玩家控制游戏的策略。
由于在此游戏中存在19种不同的游戏方块,所以在游戏方块预览区域中需要显示随机生成的游戏方块。
(2)、游戏方块控制功能。
通过各种条件的判断,实现对游戏方块的左移、右移、快速下移、自由下落、旋转功能,以及行满消除行的功能。
否(3)、游戏显示更新功能。
在判断键值时,有左移VK_LEFT、右移VK_RIGHT、下移VK_DOWN、变形旋转VK_UP、退出VK_ESC键值的判断。
c游戏课程设计报告
c 游戏课程设计报告一、教学目标本课程的教学目标是让同学们掌握C语言的基本语法,能够运用C语言进行简单的程序设计。
具体分为以下三个部分:1.知识目标:掌握C语言的基本数据类型、运算符、控制结构、函数等基本概念。
2.技能目标:能够使用C语言编写并运行简单的程序,解决实际问题。
3.情感态度价值观目标:培养同学们对计算机科学的兴趣,提高逻辑思维能力,培养良好的编程习惯。
二、教学内容根据课程目标,本课程的教学内容主要包括以下几个部分:1.C语言的基本数据类型和运算符。
2.控制结构,包括条件语句和循环语句。
3.函数的定义和调用。
4.指针的概念和应用。
5.文件的操作。
6.简单算法的设计和分析。
三、教学方法为了达到课程目标,我们将采用以下教学方法:1.讲授法:讲解C语言的基本概念和语法。
2.案例分析法:通过分析具体的编程案例,让同学们理解并掌握C语言的用法。
3.实验法:让同学们动手编写程序,解决实际问题,提高编程能力。
4.讨论法:同学们进行小组讨论,分享学习心得,互相学习,提高解决问题的能力。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:《C语言程序设计》。
2.参考书:《C Primer Plus》、《C和指针》。
3.多媒体资料:教学PPT、编程教程视频。
4.实验设备:计算机、网络环境。
5.在线编程平台:如LeetCode、牛客网等,供同学们进行编程练习。
五、教学评估本课程的评估方式包括以下几个部分:1.平时表现:包括课堂参与度、提问回答、小组讨论等,占总评的20%。
2.作业:包括课后练习和编程任务,占总评的30%。
3.考试:包括期中和期末考试,占总评的50%。
考试形式分为选择题、填空题、编程题和问答题,全面考察同学们对C语言知识的掌握和运用能力。
六、教学安排本课程的教学安排如下:1.教学进度:按照教材的章节顺序进行,每个章节安排2-4节课。
2.教学时间:每周安排2节课,共45分钟/节。
大富翁程序设计及其实验报告
大富翁程序设计及其实验报告新手小白,希望各位大佬能多多提出建议,大家一同进步前言设计题目:C语言游戏———大富翁(简易版)一、采用的数据存储结构及所代表的含义Input:判断是否进行游戏num1,num2,a1,a2:累计掷出骰子数所对应棋盘上的位置fund=2000,fund2=2000:初始资金c:判断游戏是否终止b1 = b2=:掷出的总数i=1:判断A/B进行游戏二、设计思路第一步:判断游戏是否进行第二步:判断A/B玩家进行第三步:值骰子第四步:判断掷出的数所对应效果第五步:判断是否获得成就第六步:判断是否有玩家破产第七步:若有破产则终止程序反之返回第二步第八步:判断谁获胜并输出第九步:询问是否重新游戏三:设计中的难点及解决方案难点1:产生随机数解决:利用rand函数但其只在一定范围内可以看成随机的,所以在引入srand函数利用time(NULL)变化的种子使其随机性增加难点2:棋盘可变性解决:利用头文件宏定义变量可以改变棋盘大小四:程序代码play.c#include<stdio.h> #include<stdlib.h> #include<time.h> int num1,num2, a1,a2, fund=2000,fund2=2000,c, b1 = 0,b2=0,i=1; int play(int row , int col) { printf(玩家A与B的初始资金均2000元); do { printf(****************************); printf(********* 1.continue *****); printf(********* 0.end **********); printf(****************************); scanf(%d, &c);//是否继续游戏 if (c == 0) break;//判断游戏是否终止 if (i % 2 == 1)//判断玩家A/B进行 { printf(玩家A 的回合); srand((int)time(NULL));//用于设置rand()产生随机数时的种子,time(NULL)变化的种子 num1 = rand() % 6 + 1;//生成随机数 printf(掷出结果为%d, num1); b1 += num1; a1 = b1 % (((row+col))*2+4);//在地图上所走位置 i++; switch (a1)//判断其走的步数所对应效果 { case 6: printf(倒退三步); a1 -= 3; b1 -= 3; break; case 2: printf(银行利率增长); fund *= 2; printf(剩余资金为%d, fund); break; case 5: printf(科创获奖得500元); fund += 500; printf(剩余资金为%d, fund); break; case 7: printf(被电诈骗700元); fund -= 700; printf(剩余资金为%d, fund); break; case 9: printf(投资基金增长); fund *= 5; printf(剩余资金为%d, fund); break; case : printf(前进四步); a1 += 4; b1 += 4; case 12: printf(奖学金得1000元); fund += 1000; printf(剩余资金为%d, fund); break; case 11: printf(股票暴跌); fund /= 4; printf(剩余资金为%d, fund); break; case 15: printf(投资被骗); fund /= 2; printf(剩余资金为%d, fund); break; default: printf(剩余资金为%d, fund); break; } if (fund > &&fund<) printf(累计达成成就初出茅庐); else if (fund > &&fund< ) printf(累计达成成就初出茅庐小有成就); else if (fund > &&fund< ) printf(累计达成成就初出茅庐小有成就资金充裕); else if (fund > ) printf(累计达成成就初出茅庐小有成就资金充裕资金高手); //判断获得的成就 } else { printf(玩家B的回合); srand((int)time(NULL)); num2 = rand() % 6 + 1; printf(掷出结果为%d, num2); b2 += num2; a2 = b2 % (((row + col)) * 2 + 4); i++; switch (a2) { case 6: printf(倒退三步); a2 -= 3; b2 -= 3; break; case 2: printf(银行利率增长); fund2 *= 2; printf(剩余资金为%d, fund2); break; case 5: printf(科创获奖得500元); fund2 += 500; printf(剩余资金为%d, fund2); break; case 7: printf(被电诈骗700元); fund2 -= 700; printf(剩余资金为%d, fund2); break; case 9: printf(投资基金增长); fund2 *= 5; printf(剩余资金为%d, fund2); break; case : printf(前进四步); a2 += 4; b2 += 4; case 12: printf(奖学金得1000元); fund2 += 1000; printf(剩余资金为%d, fund2); break; case 11: printf(股票暴跌); fund2 /= 4; printf(剩余资金为%d, fund2); break; case 15: printf(投资被骗); fund2 /= 2; printf(剩余资金为%d, fund2); break; default: printf(剩余资金为%d, fund2); break; } if (fund2 > && fund2 < ) printf(累计达成成就初出茅庐); else if (fund2 > && fund2 < ) printf(累计达成成就初出茅庐小有成就); else if (fund2 > && fund2 < ) printf(累计达成成就初出茅庐小有成就资金充裕); else if (fund2 > ) printf(累计达成成就初出茅庐小有成就资金充裕资金高手资金高手); } } while (fund > 0&&fund2 > 0);//判断是否出现破产 if (fund2 > fund) { printf(恭喜B胜利); } else printf(恭喜A胜利); return 0;//判断A/B胜利 }main.c#include<stdio.h> #includegame.h int main() { int input; do { printf(****************************); printf(********* 1.play *********); printf(********* 0.exit *********); printf(****************************); printf(请选择:>);//请选择是否开始游戏 scanf(%d,&input); switch (input)//判断用户的选择 { case 1: play( ROW , COL); break; case 0: printf(退出游戏); break; default: printf(选择错误重新选择); break; } } while (input); }game.h#pragma once #define ROW 7 #define COL 4//确定棋盘大小 int play(int row, int col);//调用函数总结本次实验设计通过对循环结构,选择结构的运用,使我对这些结构有了更好的理解;并且通过不断研究,也了解到了随机数生成的方式以及头文件的利用,让我对程序设计有了新的理解,利用代码可以更加方便的进行一些工作,还可以获得乐趣,同样与同伴一起讨论研究,使代码的编写过程也不枯燥,一次很好的设计体验。
扑克牌游戏程序设计报告
湖南科技大学游戏程序设计报告游戏名称:扑克牌游戏指导教师:陈林书专业班级:网络工程班学号:0905020114姓名:刘隆乾程序名称:扑克牌游戏程序功能简介:1)创建一副扑克牌,可根据需要选择有大小王或者没有大小王的扑克牌。
2)根据需要输入参与扑克牌游戏的人数。
3)重新初始化整副扑克牌,清除所有打牌者的扑克牌,并显示。
4)洗牌,并显示。
5)发牌,并显示。
6)去掉一张最上面的扑克牌,并显示7)清除所有打牌者的扑克牌,并显示。
8)显示没有发出的扑克牌的情况。
9)显示所有打牌者的扑克牌的情况。
P.S.黑体字为自行增加的功能。
对增加模块设计的分析及注解:由于对原代码很多地方觉得难以理解,且原代码有的地方用的是硬代码,所以新编写的程序只有洗牌的思路是按原代码的思路编写的,但还是改成了栈(Stack)的运行方式。
这个程序的编写是充分利用C++的面向对象的特性来写的,封装性、隐蔽性、多态性等等都有很好体现,可以说,这个程序除了没有用继承性,其他都用到了。
Class的本身就具有封装性和隐蔽性,模板类就是多态性的——类型参数多态性。
void InitMainMenu(){void Menu1(int playernum);void Menu2(int playernum);int MainMenuSelect;MainMenuSelect = 1;do{cout << endl;cout << endl;cout << "*************主菜单***************" << endl;cout << "1.有大小王的扑克牌(54张)" << endl;cout << "2.无大小王的扑克牌(52张)" << endl;cout << "3.退出本系统" << endl;cout << "请选择[1-3] " << endl;cout << "**********************************" << endl;cout << "您的选择为: ";MainMenuSelect = GetInt(1, 3);cout << endl;cout << endl;switch (MainMenuSelect){case 1:cout << "输入打牌人数: ";Menu1(GetInt(1, 9));break;case 2:cout << "输入打牌人数: ";Menu2(GetInt(1, 9));break;}}while (MainMenuSelect != 3);}程序运行后先选择是否需要有大小王的扑克牌。
c课程设计扑克牌游戏
C++课程设计实验报告1、程序名称:扑克牌游戏2、程序设计功能:创建一副扑克牌,并完成洗牌等相关操作。
3、程序设计要求:(1)增加大小王。
(2)删去一张指定的牌后,余牌显示。
(3)创建一副扑克,显示一副扑克牌,洗牌,一次分发给四个人并显示。
程序设计过程中根据设计思想添加功能:(1)根据洗牌参数,添加入可以让玩牌者控制洗牌次数的功能。
(2)在可以完成每人删除一张牌的功能基础上,增加可以删除一轮牌(也就是同时每人删除一张牌)的功能。
4、对题目的分析与注释总体分析:根据题目的设计要求,增加满足要求所需要的函数,实现相应功能,通过合理安排调用过程,实现题目要求的功能。
注释:(已在程序设计过程中指出)5、增加功能的设计思路(1)增加大小王实现函数:Deck::MakeDe ck()Playin gCard::CardMa ke()Deck::MakeDe ck()将参数nLastDel t由51增加到53,生成一副扑克牌的54张牌(0~54),实际上是多分配了两张大小王的空间,控制参数nLastDe lt 的变化,再通过调用函数PlayingCa rd::CardMa ke()将参数传递给n Num,为每张牌(包括大小王)赋予正确的面值和花色,由此生成一副完整的牌。
其中对大小王的赋值是添加的功能,具体实现过程如下:void Playin gCard::CardMa ke(int nNum)//跟据nNum生成一张扑克牌,nNum不同,生成的面值花色{int i = 0;char j;if(nNum==53) //生成大王{strcpy(achFac e," B");chSuit=2;nValue=15;}if(nNum==52) //生成小王{strcpy(achFac e," S");chSuit=1;nValue=14;}由此段程序可知,参数nLastDelt是由大到小变化的,所以54张牌中首先生成大小王,至于其他牌的生成,是课本源程序上自带的,牌的花色由相应的ASC II码来赋值。
推箱子游戏详细设计报告
推箱子游戏详细设计报告一、 引言在前一阶段(概要设计)中,已解决了实现该游戏需求的程序模块设计问题。
包括游戏模块间的关系设计,以及数据结构和模块结构的设计等。
在以下的详细设计报告中将对在本阶段中对游戏所做的所有详细设计进行说明。
本阶段依据概要设计的要求,确定应该如何具体地实现所要求的游戏,从而在编码阶段可以把这个描述直接翻译成用具体的 程序语言书写的程序。
具体包括各功能模块信息的录入和修改以及删除等。
1.2目的目的是在训练你的逻辑思考能力。
在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。
可以开发青少年学生的智力,又可以防止老年痴呆症。
1.3参考资料《C 程序设计(第三版)》,谭浩强编,清华大学出版社《Turbo C 2.0实用大全》,常玉龙等编写,北京航空航天大学出版社 《C 语言趣味程序百例精解》,陈朔鹰 陈英主编,北京理工大学出版社 《C 游戏编程从入门到精通》,浦滨著, 北京希望电子出版社 《C 函数实用手册》,张曜 郭立山 吴天著, 冶金工业出版社 二、总体设计2.1需求概要用户在进入游戏后,可以根据自己的想法自由移动箱子,游戏提供自由选关的功能模块,凭借这些模块,玩家可以实现对游戏快速通关! 2.2软件各模块结构 1、初始化模块:该模块包括和游戏。
屏幕初始化用于输出游戏的操作提示,游戏的每一关的初始化是初始化模块每一关的初始化2、 图画模块:该模块主要是被其它模块调用,用于画墙、在空地画箱子、在目的地画箱子、和画目的地。
画墙画箱子画图模块 画小人画目的地目的地画箱子3、移动箱子模块:空地之间箱子的移动移动箱子模块 目的地之间箱子的移动 目的地与空地之间的箱子移动4、移动小人模块:小人移动移动小人推动箱子到目的地5、功能控制模块:屏幕输出功能功能控制模块 指定位置状态判断功能关卡重置功能三、程序描述1初始化模块○1:开始主要的初始化就是屏幕初始化,用于输出游戏的操作提示,使玩家能知道游戏怎么玩!○2:每一个关卡的初始化,在游戏不能通关时,按空格键回到刚开始玩这个关卡的初始状态以实现玩家能快速通关!○3:进行下一关的初始化,就是这一关已经通关,要进入下一关的游戏,使游戏显示下一关的初始状态!2图画模块这个模块的功能不是很多,也比较简单,主要就是:○1:画墙:用方块表示,画出墙的形状和大小,以确定该关卡的难度。
c打字游戏课程设计报告
c打字游戏课程设计报告一、课程目标知识目标:1. 学生能够掌握C语言基础语法,包括变量声明、数据类型、运算符等。
2. 学生能够理解并运用循环结构、条件语句编写简单的打字游戏程序。
3. 学生了解基本的计算机编码知识,如ASCII码。
技能目标:1. 学生能够运用C语言编写简单的打字游戏程序,提高编程实践能力。
2. 学生能够通过编写代码解决问题,培养逻辑思维和问题解决能力。
3. 学生能够熟练使用计算机键盘,提高打字速度和准确性。
情感态度价值观目标:1. 学生培养对编程的兴趣,激发学习C语言的热情。
2. 学生在团队协作中,培养沟通、协作能力,增强团队意识。
3. 学生通过编程实践,体会计算机科学的魅力,树立正确的科技观。
课程性质:本课程为实践性较强的编程课程,结合打字游戏的形式,让学生在轻松愉快的氛围中学习C语言编程。
学生特点:五年级学生,具备一定的计算机操作能力,对游戏有浓厚兴趣,具备初步的逻辑思维能力。
教学要求:教师应注重引导学生主动探究、实践,关注学生的个体差异,鼓励学生发挥创意,提高编程能力和团队协作能力。
通过本课程的学习,使学生达到上述具体的学习成果。
二、教学内容1. C语言基础语法:- 变量声明、数据类型(整型、字符型)- 常量和变量- 运算符(算术、关系、逻辑)- 语法结构(顺序、选择、循环)2. 编程实践:- 打字游戏程序设计思路- 设计简单循环结构,实现打字游戏基本框架- 引入随机函数,生成随机字母或单词- 使用条件语句,判断用户输入与随机字母的匹配3. 计算机编码知识:- ASCII码介绍- 键盘布局与打字技巧4. 教学内容的安排和进度:- 第一课时:C语言基础语法回顾,介绍打字游戏目标- 第二课时:设计打字游戏基本框架,学习循环结构- 第三课时:引入随机函数,学习条件语句- 第四课时:完善打字游戏功能,进行编程实践- 第五课时:总结与展示,讨论编程过程中的问题及解决方法教材关联:- 《C语言趣味编程》第三章:循环结构- 《C语言趣味编程》第四章:分支结构- 《计算机科学》第二单元:计算机编码知识教学内容注重科学性和系统性,结合教材相关章节,引导学生通过实践掌握C 语言编程知识,提高编程技能。
python飞机大战程序设计报告
一、概述飞机大战是一款经典的射击游戏,玩家控制飞机在屏幕上不断向上飞行,同时射击敌机,躲避敌机的攻击。
Python作为一种广泛应用于软件开发的高级编程语言,可以用来开发各种类型的游戏。
本报告将详细介绍使用Python语言设计飞机大战程序的过程和实现方法。
二、程序设计目标1. 实现一个具有玩家飞机和敌机的基本射击游戏;2. 能够控制玩家飞机的移动和发射子弹;3. 敌机能够不断向下移动,并且发射子弹攻击玩家飞机;4. 实现游戏得分的计算和显示;5. 添加背景音乐和游戏音效。
三、程序设计思路1. 确定游戏窗口大小和背景图片;2. 创建玩家飞机和敌机的类,并实现它们的移动和碰撞检测;3. 实现玩家飞机的发射子弹和敌机的发射子弹;4. 添加得分和生命值的显示;5. 引入背景音乐和游戏音效。
四、程序设计过程1. 导入pygame模块,并初始化pygame;2. 设置游戏窗口大小和标题,并加载背景图片;3. 创建玩家飞机和敌机的类,实现它们的移动和碰撞检测;4. 实现玩家飞机的发射子弹和敌机的发射子弹;5. 添加得分和生命值的显示;6. 引入背景音乐和游戏音效。
五、程序设计实现1. 导入pygame模块,并初始化pygame:import pygamepygame.init()2. 设置游戏窗口大小和标题,并加载背景图片:SCREEN_WIDTH = 480SCREEN_HEIGHT = 600screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))pygame.display.set_caption('飞机大战')background = pygame.image.load('background.jpg').convert()3. 创建玩家飞机和敌机的类,实现它们的移动和碰撞检测:class Plane(pygame.sprite.Sprite):def __init__(self, image, speed):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image)self.rect = self.image.get_rect()self.speed = speeddef move(self):passdef shoot(self):passdef collide(self):pass4. 实现玩家飞机的发射子弹和敌机的发射子弹:class Bullet(pygame.sprite.Sprite):def __init__(self, image, speed, position): pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image) self.rect = self.image.get_rect()self.speed = speedself.rect.midbottom = positiondef move(self):pass5. 添加得分和生命值的显示:class Score(pygame.sprite.Sprite):def __init__(self):pygame.sprite.Sprite.__init__(self)self.score = 0self.font = pygame.font.Font(None, 36)def update(self):self.text = 'Score: d' self.scoreself.image = self.font.render(self.text, 1, (255, 0, 0))self.rect = self.image.get_rect()self.rect.topleft = [10, 10]6. 引入背景音乐和游戏音效:pygame.mixer.init()pygame.mixer.music.load('background_music.mp3') pygame.mixer.music.play(-1, 0.0)bullet_sound = pygame.mixer.Sound('bullet.wav')enemy_sound = pygame.mixer.Sound('enemy.wav')六、程序设计实现结果1. 程序设计完成后,玩家可以通过键盘控制飞机的移动和发射子弹;2. 敌机会不断向下移动,并发射子弹攻击玩家飞机;3. 游戏窗口中显示玩家的得分和生命值;4. 背景音乐和游戏音效能够正常播放。
人机猜数程序设计报告
人机猜数程序设计报告引言人机猜数是一种经典的猜测游戏,该游戏的目标是通过猜测推测出计算机随机生成的一个数字。
在本次报告中,我们设计了一个简单的人机猜数程序,利用计算机生成的随机数和用户的猜测,通过不断的比较和调整来逐渐逼近正确答案。
设计思路程序的主要逻辑如下:1. 计算机生成一个范围内的随机数,作为猜测的答案。
2. 用户输入猜测的数字。
3. 通过比较用户输入的数字和随机数的大小关系,给出一些提示信息。
4. 用户根据提示信息进行调整猜测,重新输入数字。
5. 重复步骤3和4,直到用户猜测出正确的答案。
设计过程生成随机数在Python中,我们可以使用random库来生成随机数。
通过调用random.randint(a, b)函数,我们可以生成[a, b]之间的一个整数。
在人机猜数游戏中,我们假设答案的范围是1到100,因此生成随机数的代码如下所示:pythonimport randomanswer = random.randint(1, 100)用户输入猜测的数字为了获取用户输入的数字,我们可以使用input()函数。
通过向input()函数传递一个提示信息,我们可以在控制台上显示提示内容,并等待用户输入。
用户输入的内容会以字符串的形式返回,因此我们需要将其转换为整数类型进行比较。
代码如下所示:pythonguess = int(input("请猜一个1到100之间的数字: "))比较数字并给出提示在用户输入了猜测的数字之后,我们需要将其与答案进行比较,并给出相应的提示信息。
通过判断用户输入的数字与答案的大小关系,我们可以给出一些提示,例如"太大了"、"太小了"、"猜对了"等。
代码如下所示:pythonif guess > answer:print("太大了")elif guess < answer:print("太小了")else:print("猜对了")重复猜测直到猜对为了让用户多次猜测直到猜对为止,我们可以使用循环语句来实现。
《程序设计课程设计》实验报告
《程序设计》课程设计姓名:学号:班级:软件工程14 班指导教师:成绩:1.消除类游戏1.1【问题描述】消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。
当有多处可以被消除时,这些地方的棋子将同时被消除。
1.2【基本要求】现在给你一个n行m列的棋盘(1≤n,m≤30),棋盘中的每一个方格上有一个棋子,请给出经过一次消除后的棋盘。
请注意:一个棋子可能在某一行和某一列同时被消除。
输入数据格式:输入的第一行包含两个整数n, m,用空格分隔,分别表示棋盘的行数和列数。
接下来n行,每行m个整数,用空格分隔,分别表示每一个方格中的棋子的颜色。
颜色使用1至9编号。
输出数据格式:输出n行,每行m个整数,相邻的整数之间使用一个空格分隔,表示经过一次消除后的棋盘。
如果一个方格中的棋子被消除,则对应的方格输出0,否则输出棋子的颜色编号。
1.3【测试数据】为方便调试程序,可将输入数据先写入一个文本文件,然后从文件读取数据处理,这样可避免每次运行程序时都要从键盘输入数据。
测试数据一输出说明:棋盘中第4列的1和第4行的2可以被消除,其他的方格中的棋子均保留。
棋盘中所有的1以及最后一行的3可以被同时消除,其他的方格中的棋子均保留。
1.4【功能实现】#include <iostream>#include <windows.h>using namespace std;int main(){int m, n, i ,j;int temp;cin >> n >> m;temp = m;m = n;n = temp;int * map = new int[m * n];int * mark = new int[m * n];int * tmap = map;int * tmark = mark;int dif = 0;//输入for ( i = 0 ; i < m ; i++ )for (j = 0; j < n; j++)cin >> *(tmap + i * n + j);for (i = 0; i < m; i++)for (j = 0; j < n; j++){//横行if ((tmap + 2 - map) % n != 0 || (tmap + 1 - map) % n != 0)if (*(tmap) == *(tmap + 1) && * (tmap + 1) == *(tmap + 2)){dif = tmap - map;*(tmark + dif) = 0;*(tmark + dif + 1) = 0;*(tmark + dif + 2) = 0;}//竖列if (tmap + 2 * n - map < m * n || tmap + n - map < m * n)if (*(tmap) == *(tmap + n) && * (tmap + n) == *(tmap + 2 * n)) {dif = tmap - map;*(tmark + dif) = 0;*(tmark + dif + n) = 0;*(tmark + dif + 2 * n) = 0;}tmap = map + (j+1) + i * n;}//输出cout << endl;tmap = map;for (i = 0; i < m; i++)for (j = 0; j < n; j++)if (* (tmark + i * n + j) == 0)*(tmap + i * n + j) = 0;for (i = 0; i < m; i++){for (j = 0; j < n; j++)cout<< *(tmap + i * n + j)<<" ";cout << endl;}system("pause");return 0;}1.5【结果和截图】1.6【心得体会】通过这次试验,我对c语言编译器和对棋盘类游戏中的棋子行列删除有了更加深刻的认识和了解。
Java程序设计报告《贪吃蛇》
《Java程序设计》课程设计报告题目:贪吃蛇游戏的设计与实现指导老师:沈泽刚专业:计算机科学与技术班级:10-3姓名:梁潇一、课程设计目的贪吃蛇游戏一款非常经典的手机游戏,因为它比较简单有趣,无论老少都比较适合。
目的是更好地了解和掌握java语言,并熟练的运用java语言来实现项目。
培养自主学习的能力。
本软件在设计方面本着方便、实用及娱乐性高的宗旨,在外界进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。
二、课程设计要求贪吃蛇游戏设计与实现,主要分为以下二个模块:游戏主界面模块、游戏控制模块。
三、课程设计报告内容(一) 系统设计1、程序概述本程序是一个利用Java应用软件制作的贪吃蛇小游戏。
在游戏过程中,用户通过点击小键盘区的方向键来控制蛇的运行方向;当蛇没有吃到食物且碰到墙壁或自己的身体时游戏结束。
本程序的另一个功能是在程序运行窗口的左上角显示,用户在游戏过程中所得的分数,不过缺点就是在退处程序后,下次打开程序时无法保存。
2、游戏的主界面设计游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、游戏分数的显示更新界面、游戏开始按钮、暂停游戏按钮、退出游戏按钮以及游戏排行榜按钮。
3、游戏控制模块设计这个模块是游戏的中心环节,主要完成控制游戏的开始、暂停、退出等功能。
为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。
(二)主界面设计游戏界面主框架主要包括游戏图形区域界面、游戏的开始按钮、暂停按钮、游戏的退出按钮、困难程度、积分排行、关于作者。
(三)代码设计import java.awt.Color;import java.awt.Container;import java.awt.Graphics;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import javax.swing.*;public class TanChiShe extends JFrame implements ActionListener, KeyListener,Runnable{private JMenuBar menuBar;private JMenu youXiMenu,nanDuMenu,fenShuMenu,guanYuMenu;private JMenuItem kaiShiYouXi,exitItem,zuoZheItem,fenShuItem;private JCheckBoxMenuItem cJianDan,cPuTong,cKunNan;private int length = 6;private Toolkit toolkit;private int i,x,y,z,objectX,objectY,object=0,growth=0,time;private int difficult=2;private int m[]=new int[50];private int n[]=new int[50];private Thread she = null;private int life=0;private int foods = 0;private int fenshu=0;public void run() //运行{time=500;for(i=0;i<=length-1;i++){m[i]=90-i*10;n[i]=60;}x=m[0];y=n[0];z=4;while(she!=null){check();try{she.sleep(time);}catch(Exception ee){System.out.println(z+"");}}}public TanChiShe(){//***************创建新对象**************setVisible(true);menuBar = new JMenuBar();Container con=getContentPane();toolkit=getToolkit();//**************游戏菜单对象*****************youXiMenu = new JMenu("游戏");kaiShiYouXi = new JMenuItem("开始游戏");exitItem = new JMenuItem("退出游戏");//***************困难程度对象****************nanDuMenu = new JMenu("困难程度");cJianDan = new JCheckBoxMenuItem("简单");cPuTong = new JCheckBoxMenuItem("普通");cKunNan = new JCheckBoxMenuItem("困难");//*****************分数菜单对象****************fenShuMenu = new JMenu("积分排行");fenShuItem = new JMenuItem("最高记录");//****************关于对象*********************guanYuMenu = new JMenu("关于");zuoZheItem = new JMenuItem("关于作者");//***************设置关于菜单*******************guanYuMenu.add(zuoZheItem);//****************设置困难程度菜单**************nanDuMenu.add(cJianDan);nanDuMenu.add(cPuTong);nanDuMenu.add(cKunNan);//******************设置分数菜单***************fenShuMenu.add(fenShuItem);//*****************设置游戏菜单****************youXiMenu.add(kaiShiYouXi);youXiMenu.add(exitItem);//******************设置主菜单********************menuBar.add(youXiMenu);menuBar.add(nanDuMenu);menuBar.add(fenShuMenu);menuBar.add(guanYuMenu);//*********************监听注册*****************zuoZheItem.addActionListener(this);kaiShiYouXi.addActionListener(this);exitItem.addActionListener(this);addKeyListener(this);fenShuItem.addActionListener(this);//*********************加快捷键********************KeyStroke keyOpen = KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK);kaiShiYouXi.setAccelerator(keyOpen);KeyStroke keyExit = KeyStroke.getKeyStroke('X',InputEvent.CTRL_DOWN_MASK); exitItem.setAccelerator(keyExit);//*****************设置框架**********************setJMenuBar(menuBar);setTitle("贪吃蛇");setResizable(false);setBounds(300,200,400,400);validate();setDefaultCloseOperation(EXIT_ON_CLOSE);}public static void main(String args[]){new TanChiShe();}//******************菜单监听******************************public void actionPerformed(ActionEvent e){if(e.getSource()==kaiShiYouXi){length = 6;life = 0;foods = 0;if(she==null){she=new Thread(this);she.start();}else if(she!=null){she=null;she= new Thread(this);she.start();}}if(e.getSource()==exitItem){System.exit(0);}if(e.getSource()==zuoZheItem){JOptionPane.showMessageDialog(this, "梁潇"+"\n\n");}if(e.getSource()==fenShuItem){JOptionPane.showMessageDialog(this,"最高记录为"+fenshu+""); }}//**************检查一下******************************* public void check(){isDead();if(she!=null){if(growth==0){reform();}else{upgrowth();}if(x==objectX&&y==objectY){object=0;growth=1;toolkit.beep();}//****************产生食物坐标**********************if(object==0){object=1;objectX=(int)Math.floor(Math.random()*39)*10;objectY=(int)Math.floor(Math.random()*29)*10+50;}this.repaint();}}void isDead(){if(z==4){x=x+10;}else if(z==3){x=x-10;}else if(z==2){y=y+10;}else if(z==1){y=y-10;}if(x<0||x>390||y<50||y>390) {she=null;}for(i=1;i<length;i++){if(m[i]==x&&n[i]==y){she=null;}}}public void upgrowth(){if(length<50){length++;}growth--;time=time-10;reform();life+=100;if(fenshu<life){fenshu = life;}foods++;}public void reform(){for(i=length-1;i>0;i--){m[i]=m[i-1];n[i]=n[i-1];if(z==4){m[0]=m[0]+10;}if(z==3){m[0]=m[0]-10;}if(z==2){n[0]=n[0]+10;}if(z==1){n[0]=n[0]-10;}}public void keyPressed(KeyEvent e){if(she!=null){if(e.getKeyCode()==KeyEvent.VK_UP){if(z!=2){z=1;check();}}else if(e.getKeyCode()==KeyEvent.VK_DOWN) {if(z!=1){z=2;check();}}else if(e.getKeyCode()==KeyEvent.VK_LEFT){if(z!=4){z=3;check();}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){if(z!=3){z=4;check();}}}}public void keyReleased(KeyEvent e){// TODO自动生成方法存根}public void keyTyped(KeyEvent e){// TODO自动生成方法存根}public void paint(Graphics g){//*******************画图********************** g.setColor(Color.DARK_GRAY);g.fillRect(0,50,400,400);g.setColor(Color.pink);for(i=0;i<=length-1;i++){g.fillRect(m[i],n[i],10,10);}g.setColor(Color.green);g.fillRect(objectX,objectY,10,10);g.setColor(Color.white);g.drawString("当前分数"+this.life,6,60);g.drawString("当前已吃食物数"+this.foods,6,72);}}(四)测试(五)使用说明在游戏过程中,用户通过点击小键盘区的方向键来控制蛇的运行方向;当蛇没有吃到食物且碰到墙壁或自己的身体时游戏结束。
游戏程序设计实验报告
v1.0 可编辑可修改华中师范大学计算机科学系《游戏设计基础》实验报告姓名学号:指导老师:实验课题:贪吃蛇游戏的实现交报告日期:2012/5/24目录摘要 (6)1、设计要求 (7)2、所用仪器设备 (7)3、具体设计过程...................................................8.、程序功能. (8)设计思想 (8).设计的具体实现………………………………..…….8.总体流程图 (14)、程序代码编写及注释 (15)调试问题及解决方法 (21)调试结果……………………………………………….22.4设计心得体会……………………………………………25.5、参考文献 (26)摘要编写C语言程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。
作为一个完整的程序,尤其是一个完整的游戏,必须考虑人机交流与用户体验。
游戏的界面不能太丑,更不能连个简单的界面都没有。
游戏应该有个比较漂亮的界面,在有必要硬件支持和软件的支持下,游戏开发者必须最大限度的使游戏美观。
游戏的美观是一方面,游戏的内在素质是另一方面。
一个游戏的优劣,最终由玩家决定。
在游戏与玩家见面之前,游戏开发者要设计一种让玩家投入的游戏模式,并且在一定的游戏规则下进行。
关键词贪吃蛇流程图 c语言源程序 turbo C贪吃蛇游戏程序设计1、设计要求通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。
(1).收集资料,分析课题,分解问题,形成总体设计思路;(2).深入分析各个小问题,列出大纲,编写各部分程序模块;(3).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;(4).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;(5).完成课程设计报告,并进行答辩C语言是一种易学易懂的通用程序设计语言,由于它具有功能性强,运用简洁,灵活兼有高级语言与低级语言的优点,以及“目标程序效率高”可移植性和能在各种系统上普遍实现等特点使它成为当今世界上的主流程序设计语言之一,同时被选作目前全世界广泛应用,同时也是大学生必修的科目。
飞机大战c语言程序设计报告
飞机大战c语言程序设计报告飞机大战是一款经典的射击类游戏,玩家通过控制飞机的移动和射击来击败敌人。
在本次C语言程序设计报告中,我将介绍飞机大战游戏的设计思路、主要功能和实现方法。
首先,我们需要设计游戏的界面。
使用C语言的图形库,我们可以创建一个窗口来展示游戏。
窗口中央是玩家操控的飞机,周围是敌人飞机和其他的游戏元素。
我们可以使用ASCII字符来绘制游戏界面,使用光标移动和颜色控制函数来实现动态效果。
接下来,我们需要实现玩家飞机的控制。
通过监听键盘输入,我们可以控制飞机的移动。
当按下方向键时,可以让飞机上下左右移动。
同时,我们还需要实现飞机的射击功能。
当用户按下空格键时,飞机会发射子弹,击中敌人飞机会得分。
在游戏中,我们还需要实现敌人飞机的出现和移动。
为了增加游戏的难度,可以设置多个敌人飞机,它们会从屏幕的上方或者右方进入游戏界面,并以一定的速度进行移动。
当敌人飞机飞出屏幕或者被玩家击中时,会消失并重新生成新的敌人飞机。
除了敌人飞机,我们还可以在游戏中添加其他的游戏元素,如道具箱、障碍物等。
玩家可以通过接触道具箱获得奖励,如增加射速、伤害等。
而障碍物可以增加游戏的挑战性,玩家需要躲避障碍物的同时击败敌人飞机。
最后,我们还可以为游戏增加音效和背景音乐,增强游戏的趣味性和可玩性。
通过调用C语言的音频库,我们可以实现在游戏中播放声音。
总结起来,飞机大战是一款非常经典和有趣的游戏。
通过本次C语言程序设计,我们可以深入了解游戏的设计思路和实现方法。
希望本次报告能够对大家了解飞机大战及其相应的C语言程序设计有所帮助。
Java程序设计报告《贪吃蛇》
Java程序设计报告《贪吃蛇》《Java程序设计》课程设计报告题目:贪吃蛇游戏的设计与实现指导老师:沈泽刚专业:计算机科学与技术班级:10-3姓名:梁潇一、课程设计目的贪吃蛇游戏一款非常经典的手机游戏,因为它比较简单有趣,无论老少都比较适合。
目的是更好地了解和掌握java语言,并熟练的运用java语言来实现项目。
培养自主学习的能力。
本软件在设计方面本着方便、实用及娱乐性高的宗旨,在外界进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。
二、课程设计要求贪吃蛇游戏设计与实现,主要分为以下二个模块:游戏主界面模块、游戏控制模块。
三、课程设计报告内容(一) 系统设计1、程序概述本程序是一个利用Java应用软件制作的贪吃蛇小游戏。
按钮、暂停按钮、游戏的退出按钮、困难程度、积分排行、关于作者。
(二)代码设计import java.awt.Color;import java.awt.Container;import java.awt.Graphics;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import javax.swing.*;public class TanChiShe extends JFrame implements ActionListener, KeyListener,Runnable{private JMenuBar menuBar;private JMenu youXiMenu,nanDuMenu,fenShuMenu,guanYuMenu; private JMenuItem kaiShiYouXi,exitItem,zuoZheItem,fenShuItem;private JCheckBoxMenuItem cJianDan,cPuTong,cKunNan; private int length = 6;private Toolkit toolkit;private int i,x,y,z,objectX,objectY,object=0,growth=0,time;private int difficult=2;private int m[]=new int[50];private int n[]=new int[50];private Thread she = null;private int life=0;private int foods = 0;private int fenshu=0;public void run() //运行{time=500;for(i=0;i<=length-1;i++){m[i]=90-i*10;n[i]=60;}x=m[0];y=n[0];z=4;while(she!=null){check();try{she.sleep(time);}catch(Exception ee){System.out.println(z+"");}}}public TanChiShe(){//***************创建新对象**************setVisible(true);menuBar = new JMenuBar();Container con=getContentPane();toolkit=getToolkit();//**************游戏菜单对象***************** youXiMenu = new JMenu("游戏");kaiShiYouXi = new JMenuItem("开始游戏");exitItem = new JMenuItem("退出游戏");//***************困难程度对象**************** nanDuMenu = new JMenu("困难程度");cJianDan = new JCheckBoxMenuItem("简单");cPuTong = new JCheckBoxMenuItem("普通");cKunNan = new JCheckBoxMenuItem("困难");//*****************分数菜单对象****************fenShuMenu = new JMenu("积分排行");fenShuItem = new JMenuItem("最高记录");//****************关于对象*********************guanYuMenu = new JMenu("关于");zuoZheItem = new JMenuItem("关于作者");//***************设置关于菜单*******************guanYuMenu.add(zuoZheItem);//****************设置困难程度菜单**************nanDuMenu.add(cJianDan);nanDuMenu.add(cPuTong);nanDuMenu.add(cKunNan);//******************设置分数菜单***************fenShuMenu.add(fenShuItem);//*****************设置游戏菜单****************youXiMenu.add(kaiShiYouXi);youXiMenu.add(exitItem);//******************设置主菜单********************menuBar.add(youXiMenu);menuBar.add(nanDuMenu);menuBar.add(fenShuMenu);menuBar.add(guanYuMenu);//*********************监听注册*****************zuoZheItem.addActionListener(this);kaiShiYouXi.addActionListener(this);exitItem.addActionListener(this);addKeyListener(this);fenShuItem.addActionListener(this);//*********************加快捷键********************KeyStroke keyOpen = KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK);kaiShiYouXi.setAccelerator(keyOpen);KeyStroke keyExit = KeyStroke.getKeyStroke('X',InputEvent.CTRL_DOWN_MASK);exitItem.setAccelerator(keyExit);//*****************设置框架**********************setJMenuBar(menuBar);setTitle("贪吃蛇");setResizable(false);setBounds(300,200,400,400);validate();setDefaultCloseOperation(EXIT_ON_CLOSE);}public static void main(String args[]){new TanChiShe();}//******************菜单监听****************************** public void actionPerformed(ActionEvent e){if(e.getSource()==kaiShiYouXi){length = 6;life = 0;foods = 0;if(she==null){she=new Thread(this);she.start();}else if(she!=null){she=null;she= new Thread(this);she.start();}}if(e.getSource()==exitItem){System.exit(0);}if(e.getSource()==zuoZheItem)JOptionPane.showMessageDialog(this, "梁潇"+"\n\n");}if(e.getSource()==fenShuItem){JOptionPane.showMessageDialog(this,"最高记录为"+fenshu+"");}}//**************检查一下******************************* public void check(){isDead();if(she!=null){if(growth==0){reform();}else{upgrowth();}if(x==objectX&&y==objectY){object=0;growth=1;toolkit.beep();}//****************产生食物坐标**********************if(object==0){object=1;objectX=(int)Math.floor(Math.random()*39)*10;objectY=(int)Math.floor(Math.random()*29)*10+50;}this.repaint();}}void isDead()if(z==4){x=x+10;}else if(z==3){x=x-10;}else if(z==2){y=y+10;}else if(z==1){y=y-10;}if(x<0||x>390||y<50||y>390) {she=null;}for(i=1;i<length;i++){if(m[i]==x&&n[i]==y){she=null;}}}public void upgrowth(){if(length<50){length++;}growth--;time=time-10;reform();life+=100;if(fenshu<life){fenshu = life;}foods++;}public void reform(){for(i=length-1;i>0;i--){m[i]=m[i-1];n[i]=n[i-1];}if(z==4){m[0]=m[0]+10;}if(z==3){m[0]=m[0]-10;}if(z==2){n[0]=n[0]+10;}if(z==1){n[0]=n[0]-10;}}public void keyPressed(KeyEvent e){if(she!=null){if(e.getKeyCode()==KeyEvent.VK_UP){if(z!=2){z=1;check();}}else if(e.getKeyCode()==KeyEvent.VK_DOWN) {if(z!=1){z=2;check();}}else if(e.getKeyCode()==KeyEvent.VK_LEFT){if(z!=4){z=3;check();}}else if(e.getKeyCode()==KeyEvent.VK_RIGHT) {if(z!=3){z=4;check();}}}}public void keyReleased(KeyEvent e){// TODO 自动生成方法存根}public void keyTyped(KeyEvent e){// TODO 自动生成方法存根}public void paint(Graphics g){//*******************画图********************** g.setColor(Color.DARK_GRAY);g.fillRect(0,50,400,400);g.setColor(Color.pink);for(i=0;i<=length-1;i++){g.fillRect(m[i],n[i],10,10);}g.setColor(Color.green);g.fillRect(objectX,objectY,10,10);g.setColor(Color.white);g.drawString("当前分数"+this.life,6,60);g.drawString("当前已吃食物数"+this.foods,6,72); }}(三)测试(四)使用说明在游戏过程中,用户通过点击小键盘区的方向键来控制蛇的运行方向;当蛇没有吃到食物且碰到墙壁或自己的身体时游戏结束。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2011年6月3日第一章引言 (1)1.1研究背景 (1)第二章需求分析与系统设计 (2)2.1设计目的 (2)2.2设计要求 (3)2.3实现功能 (3)2.4界面设计 (4)2.5详细设计 (4)2.6结构模块 (6)第三章开发平台及开发技术 (6)3.1J2ME基础知识 (6)3.2开发工具和环境搭配 (6)3.2.1开发工具 (6)3.2.2环境搭配 (7)第四章模块具体实现以及主要动画触发解释 (7)4.1key代码 (7)4.2electricity代码 (9)第五章心得体会 (11)第一章引言1.1研究背景Green foot是针对那些想让自己熟悉如何使用JAVA的人而设计的,是一个功能完整的开发环境,可以使用Java方便地编写游戏和进行模拟。
它还可以被用来作为Java语言的教程,以及设计网络游戏,可以实用于所有年龄段的用户,而不仅仅是初学者。
最主要的是Green foot和BlueJ系统一样,对任何用途都是免费的。
这个系统以及它的文档可以重新发布而不需要任何费用,为使用和学习JAVA的朋友提供了一个很好的环境。
Greenfoot可以认为是一个用java语言创建二维图形程序的框架和IDE的结合体,很适合初学者使用。
Greenfoot支持java的全部特性,它特别适合练习可视化组件的编程。
在Greenfoot中,对象的可视化和对象的交互性是关键。
在Greenfoot的帮助之下一些软件游戏的开发变得很简单。
我这次开发的是一款益智类的游戏。
我希望通过自己的所学知识把它剖析开来,真正的了解它的本质和精髓。
虽然我的编程能力不是很强,但是我有信心,在这次学习中我将从实践和实际的项目中提高自己的编程能力。
第二章需求分析与系统设计2.1设计目的通过本学期对游戏程序的研究,我们掌握了运用greenfoot来制作游戏的技术,虽然不娴熟还有待提高,但是一些技术含量较低的小游戏还是很容易让我们掌握的。
此次游戏程序设计的目的,主要是通过greenfoot来制作游戏来更好的掌握java语言。
通过greenfoot这个平台,熟习greenfoot在制作游戏方面所需要的技巧,将自己的游戏尽可能多的运用所学到的技术,并且将在平时java课程上面学到的知识付诸于实践,并从实际操作中,找出自己的不足之处进行弥补。
每一次的课程设计,都是一次小小的软件工程,所以需要我们用百分百的的态度来对待。
对于小一点的程序,我们一个人足以应付,但是这并不是说我们可以单独一个人为所欲为,其实质应该是通过课程设计来锻炼自己独立自主的能力。
而对于那些相对于麻烦的程序,就需要两个或者多个人来共同完成,这便需要他们的协作能力,这样对他们以后进入软件公司发展有了更多的基础。
2.2设计要求这次课程设计的要求并不像以往那么紧,老师让我们可以通过多个平台和系统来制作游戏,包括电脑游戏和手机游戏,从sun公司的手机开发平台WTK,到谷歌的安卓操作系统,只要我们喜好哪一个,并有能力完成就可以了。
所以,这次我选择了greenfoot作为我游戏编程的平台。
因为我平时学习的就是java语言,而greenfoot便是一个已Java语言为基础的游戏开发平台,所以,在编程的过程中不仅提高了效率,也让我对java语言和greenfoot之间衔接的关系有了更深了理解,同样,也让我更加熟习了这个游戏开发平台的环境。
2.3实现功能此次我的课程设计的游戏名称为:“小鸡历险记”。
通过名字,我们就可以看出,这是一个益智类的游戏。
它的由来,是我根据超级玛丽的灵感而生的。
超级玛丽这个游戏就是一个结合控制和脑力与一体的游戏,充分缓解玩家的心情,让玩家在娱乐中找到成功。
我的这游戏,玩家控制的便是一个类似于超级玛丽的一个任务,他是以一个小鸡的模型组成的,具有一定的生命值,一般都为3。
接下来便是像超级玛丽这个游戏一样,在游戏中会出现一些移动的物体和火球,这些便是敌人,玩家要按上、下、左、右,控制小鸡的方向。
如果躲闪不及时,便回减去一滴血,从而生命值便会减一个。
随着关数的增加,过关的难度也会随之增加。
这个游戏的特别之处:①:可以选择不同的难度来挑战相同的关卡,以次增加游戏的可玩性;②:没有死亡模式,这样可以让玩家通过多次的尝试之后来完成任务。
③:有BOSS模式,玩家可以尝试击败BOSS来进入下一个关卡,增加游戏的可玩性。
2.4界面设计这个程序是一个益智类的游戏,包括躲避敌人、杀死敌人。
是一个单机游戏,同一时刻只能有一位玩家进行游戏。
如图12.5详细设计系统流程图:游戏开局出现如图1,然后进行难度的选择,再是关卡的选择,然后就可以游戏了,如果失败那就继续游戏,直到成功为止。
如果一直没有成功,上诉循环过程。
虽然是一直循环下去的,但是只要修改一下程序就可以修改。
2.6结构模块第三章开发平台及开发技术3.1J2ME基础知识Green foot是针对那些想让自己熟悉如何使用JAVA的人而设计的是一个功能完整的开发环境,可以使用Java方便地编写游戏和进行模拟。
它还可以被用来作为Java语言的教程,以及设计网络游戏,可以实用于所有年龄段的用户,而不仅仅是初学者最主要的是Green foot和BlueJ系统一样,对任何用途都是免费的。
这个系统以及它的文档可以重新发布而不需要任何费用,为使用和学习JAVA的朋友提供了一个很好的环境.3.2开发工具和环境搭配3.2.1开发工具Greenfoot可以认为是一个用java语言创建二维图形程序的框架和IDE 的结合体,很适合初学者使用。
Greenfoot支持java的全部特性,它特别适合练习可视化组件的编程。
在Greenfoot中,对象的可视化和对象的交互性是关键。
如果你知道BlueJ和Microworld这两个框架的话,Greenfoot可以看作他们的结合。
这个框架可以用来实现基于二维网格的很多程序。
greenfoot的框架负责两部分工作:简便的产生对象的图形化显示,按照模拟的路线运行。
为了实现这些功能,Greenfoot框架提供了一个GreenfootObject基类,其他任何想实现可视化的类都要继承他。
必须执行的两个最重要的方法是:getImage()返回对象的图形,act()将在模拟路线中调用。
3.2.2环境搭配(1)计算机的环境变量需要设置,计算机需要安装JDK版本为1.6。
由于GREEN FOOT需要绑定JDK。
(2)Green Foot的安装,需要到官网上下载正确的Green Foot版本,安装后需要测试时候可以使用,是否与JDK绑定。
第四章模块具体实现以及主要动画触发解释4.1key代码public class key extends Actor{boolean bpickedup=false;boolean bremoved=false;private myWorld mworld;public void addedToWorld(World world){mworld=(myWorld)world;}public void act(){if(bremoved){return;}findplayer();picked();}private void findplayer(){if(bpickedup){return;}//if its already picked up then dont botherplayer neb=(player)getOneIntersectingObject(player.class);if(neb!=null){Greenfoot.playSound("keycollect.wav");bpickedup=true;}}private void findenemy(){getOneObjectAtOffset(0,8,enemy.class);enemy mutantleg=(enemy)getOneIntersectingObject(enemy.class);if(mutantleg!=null&&mutantleg.health>1&&!mutantleg.bKnockedOut&&mutantleg.canbeattacked()){mutantleg.health=1;mutantleg.ys=-3;mutantleg.knockmeout();Greenfoot.playSound("kick.wav");getWorld().addObject(new effect(),mutantleg.getX(),mutantleg.getY()-8);}}}介绍Key这个类:首先这个类必须是继承Actor这个父类的,然后是Finddoor这个方法,先是一个判断:如果有Key则开门,反之则不开门,有Key方可进入下一关卡。
玩家必须拿到钥匙之后方可进入下一个关卡。
4.2electricity代码public class electricity extends hazard{boolean bRemoved=false;float xs,ys;int health=22;float xx,yy;public electricity(boolean noeffect){xs=0.1f*(float)(Greenfoot.getRandomNumber(16)-Greenfoot.getRandomNumber(16));ys=0.1f*(float)(Greenfoot.getRandomNumber(16)-Greenfoot.getRandomNumber(16));health=13;}public electricity(){xs=0.1f*(float)(Greenfoot.getRandomNumber(40)-Greenfoot.getRandomNumber(40));ys=0.1f*(float)(Greenfoot.getRandomNumber(40)-Greenfoot.getRandomNumber(40));}public void addedToWorld(World world){yy=getY();xx=getX();}public void act(){if(bRemoved){return;}huntplayer();xx+=xs;yy+=ys;setLocation((int)xx,(int)yy);setRotation(Greenfoot.getRandomNumber(360));health--;if(health<=0){removeme();}}private void removeme(){if(bRemoved){return;}bRemoved=true;getWorld().removeObject(this);}}敌人自动寻找玩家,进行一些无规则的运动,如在攻击范围之内就会触发electric这个类,敌人就会变化成后者这个形态,玩家要做的就是远离敌人攻击状态。