java课程设计贪吃蛇
面向对象课程设计--基于java的贪吃蛇游戏的设计与开发

面向对象课程设计1.需求分析1.1游戏开发的可行性游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷,经典游戏比比皆是。
游戏这个名称一直就存在于每个人的日常生活中,如猜拳游戏、猜谜游戏、大地游戏、球类游戏等,林林总总,不胜枚举,甚至于有些流行歌曲把人生也比喻为游戏,好比“一场游戏一场梦”。
因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色。
1.2设计目的综合运用在校期间所学理论知识和技能,设计开发贪吃蛇游戏,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,提高工程实践能力。
1.3游戏需求给出1条小蛇和随机出1个食物当小蛇吃到食物时就加分。
1.3.1游戏界面需求良好的用户界面,有分数显示。
有存取档功能,并且可以暂停,还有“英雄榜”记录分数排名情况,并且可调节小蛇运动速度。
1.3.2游戏形状(方块)需求良好的方块形状设计,绘制小蛇和食物,小蛇由几个方块组成,食物由1个方块组成。
1.3.3键盘处理事件小蛇可通过键盘方向键(上、下、左、右键)进行向上、向下、向左、向右移动。
1.3.4显示需求当小蛇吃掉几个食物后会变长,并且吃完食物时食物会消失,并立即随机生成1个新的食物。
1.3.5 接口控制本软件需求通过键盘进行操作,在Windows的操作系统下,利用键盘的上、下、左、右键对小蛇进行移动操作,要使用键盘的接口事件。
2.功能设计及源程序的主要部分2.1 游戏流程图2.2 功能的实现,类的实现及类层次2.2.1游戏界面public SnakeFrame() {setSize(width, height); //设置窗体大小setTitle("贪吃蛇"); //标题SnakePanel panel = new SnakePanel();//游戏面板add(panel); //将面板添加到窗体中setLocation(260, 160); //设置窗体位置setVisible(true);setResizable(false); //禁用窗体最大化}2.2.2功能按钮public SnakePanel() {//构造函数//添加功能按钮setLayout(null);add(startGame);add(stopGame);add(saveGame);add(listGame);add(newGame);add(exitGame);//设置位置startGame.setBounds(402, 50, 80, 40);stopGame.setBounds(402, 100, 80, 40);saveGame.setBounds(402, 150, 80, 40);listGame.setBounds(402,200, 80, 40);newGame.setBounds(402, 250, 80, 40);exitGame.setBounds(402, 300, 80, 40);//添加监视器ButtonListener btnListener=new ButtonListener();startGame.addActionListener(btnListener);stopGame.addActionListener(btnListener);saveGame.addActionListener(btnListener);listGame.addActionListener(btnListener);newGame.addActionListener(btnListener);exitGame.addActionListener(btnListener);//取消所有Button 的焦点startGame.setFocusable(false);stopGame.setFocusable(false);saveGame.setFocusable(false);listGame.setFocusable(false);newGame.setFocusable(false);//速度String speed[]={"1","2","3","4","5","预设"};combspeed=new JComboBox(speed);combspeed.setBorder(BorderFactory.createTitledBorder("速度"));add(combspeed);//添加组合框combspeed.setBounds(402,340,80,46);comboBoxListener comblistener=new comboBoxListener();combspeed.addActionListener(comblistener);//添加监视器combspeed.setFocusable(false); //取消焦点initGame(); //初始化游戏addKeyListener(new Listener());//添加键盘按键监视器setFocusable(true); //将焦点设置在当前面板上以便通过键盘控制游戏thiswin=this;}2.2.3键盘监视器class Listener implements KeyListener {public void keyPressed(KeyEvent e) {int key = e.getKeyCode();//获得键码if (key == KeyEvent.VK_LEFT && direction != 2)direction = 0; //左else if (key == KeyEvent.VK_UP && direction != 3)direction = 1; //上else if (key == KeyEvent.VK_RIGHT && direction != 0) direction = 2; //右else if (key == KeyEvent.VK_DOWN && direction != 1) direction = 3; //下}public void keyReleased(KeyEvent e) {}@Overridepublic void keyTyped(KeyEvent e) {}}public void keyPressed(KeyEvent e) {int key = e.getKeyCode();//获得键码if (key == KeyEvent.VK_LEFT && direction != 2)direction = 0; //左else if (key == KeyEvent.VK_UP && direction != 3)direction = 1; //上else if (key == KeyEvent.VK_RIGHT && direction != 0) direction = 2; //右else if (key == KeyEvent.VK_DOWN && direction != 1) direction = 3; //下}2.2.4蛇和食物的变化2.2.4.1蛇和食物的产生:public void drawSnake(Graphics g){Graphics2D g2d = (Graphics2D) g;for(int i=0;i<arrayList.length;i++){for(int j=0;j<arrayList[i].length;j++){if(arrayList[i][j] == 1){ //蛇身g.setColor(frontcolor); //蛇身颜色}else if(arrayList[i][j] == 2){//蛇头g.setColor(Color.RED); //蛇头颜色}else if(arrayList[i][j] == 3){ //食物g.setColor(foodcolor); //食物颜色}if (arrayList[i][j] != 0) {int curx = border_left + i * 10;int cury = border_top + j * 10;g2d.draw(new Rectangle2D.Double(curx, cury, 8, 8));}}}}2.2.4.2小蛇移动和吃掉食物:public boolean Move() {//移动if (direction == 0)x -= 1; //左else if (direction == 1)y -= 1; //上else if (direction == 2)x += 1; //右else if (direction == 3)y += 1; //下//向前移动一步if(GameOver()){//游戏结束clock.stop();gameover=true;flag=false; //不再产生新的豆豆if(x < 0 || x >=arrayList.length || y < 0 || y >= arrayList[0].length){}else{arrayList[x][y]=2; //此时蛇头位置}int headx=snakeBody.get(0).x; //头部坐标int heady=snakeBody.get(0).y;arrayList[headx][heady]=1; //蛇头变蛇身int tailx=snakeBody.get(snakeBody.size()-1).x;//尾部坐标int taily=snakeBody.get(snakeBody.size()-1).y;arrayList[tailx][taily]=0; //修改尾部return false; //游戏结束}arrayList[x][y]=2; //此时蛇头位置int headx=snakeBody.get(0).x; //头部坐标int heady=snakeBody.get(0).y;arrayList[headx][heady]=1; //蛇头变蛇身snakeBody.add(0,new Point(x,y));//添加新的头部int tailx=snakeBody.get(snakeBody.size()-1).x;//尾部坐标int taily=snakeBody.get(snakeBody.size()-1).y;if(x == foodx && y == foody){ //吃掉了豆豆flag=true; //可以产生新的豆豆score+=time; //总分数time=30; //新豆豆的分值}else{arrayList[tailx][taily]=0; //修改尾部snakeBody.remove(snakeBody.size()-1);//删除旧的尾部}return true;}2.2.5记录游戏的功能2.2.5.1判断是否可进入记录:public boolean enableShow(){if(score == 0){return false;}if(!new File("Data").exists()){//Data 目录不存在return true;}if(!new File("Data","list.snake").exists()){//list.snake 文件不存在return true;}File file=new File("Data","list.snake");BufferedReader iostream=new BufferedReader(new FileReader(file));String strline=iostream.readLine();if(strline == null){//空文件return true;}int row=0;while(strline!=null){String str[]=strline.split("#");//信息以#分隔成name 和score 两部分if(str.length!=2){ //格式错误时删除文件iostream.close();//关闭流否则无法删除文件file.delete(); //删除文件return true;}int gain=Integer.parseInt(str[1]);if(score >= gain){return true;}strline=iostream.readLine();//读取下一行row++;}if(row <= 9){return true;}iostream.close();//关闭流} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return false;}2.2.5.2保存数据到文件:public void saveDataToFile(String filename){if(gameover){ //游戏已结束无法保存return;}File file=new File("Data",filename);BufferedWriter out=new BufferedWriter(new FileWriter(file));//当前矩阵out.write("Matrix\n");for(int i=0;i<arrayList.length;i++){//矩阵数据for(int j=0;j<arrayList[i].length;j++){out.write(arrayList[i][j]+"#");}out.write("\n");//换行}//snakeBodyout.write("snakeBody\n");for(int i=0;i<snakeBody.size();i++){//链表数据String str=String.valueOf(snakeBody.get(i).x);str+=","+String.valueOf(snakeBody.get(i).y);out.write(str+"\n");}//头部坐标out.write("head\n");out.write(x+","+y+"\n");//当前食物坐标out.write("food\n");out.write(foodx+","+foody+"\n");//是否可产生新的食物out.write("flag\n");out.write(String.valueOf(flag)+"\n");//移动方向out.write("direction\n");out.write(String.valueOf(direction)+"\n");//当前总分out.write("score\n");out.write(String.valueOf(score)+"\n");//当前食物剩余分值out.write("time\n");out.write(String.valueOf(time)+"\n");//关闭流out.close();} catch (IOException e) {e.printStackTrace();}catch(Exception ee){}}2.2.5.3从文件中读取数据:public void readDataFromFile(String filename){for(int i=0;i<arrayList.length;i++){for(int j=0;j<arrayList[i].length;j++){arrayList[i][j]=0;//全部初始化为空}}snakeBody.clear();File file=new File("Data",filename);try {BufferedReader in=new BufferedReader(new FileReader(file));String str=in.readLine();if(!str.equals("Matrix")){JOptionPane.showMessageDialog(this, "文件格式错误:无法读取");return;}//读取矩阵元素str=in.readLine();int i=0;while(str!=null){String data[]=str.split("#");for(int j=0;j<data.length;j++){arrayList[i][j]=Integer.parseInt(data[j]);}i++;//下一行str=in.readLine();if(str.equals("snakeBody")){break;//跳出while循环}}//读取snakeBody数据str=in.readLine();while(str!=null){String data[]=str.split(",");int x=Integer.parseInt(data[0]);int y=Integer.parseInt(data[1]);snakeBody.add(new Point(x,y)); //每次都添加到尾部str=in.readLine();if(str.equals("head")){break;}}//读取头部坐标str=in.readLine();if(str!=null){String data[]=str.split(",");x=Integer.parseInt(data[0]);y=Integer.parseInt(data[1]);}str=in.readLine();if (str!=null && str.equals("food")) { //读取当前食物坐标str = in.readLine();if (str != null) {String data[] = str.split(",");foodx = Integer.parseInt(data[0]);foody = Integer.parseInt(data[1]);}}//读取flagstr=in.readLine();if(str!=null && str.equals("flag")){str=in.readLine();if(str!=null){flag=Boolean.parseBoolean(str);}}//读取移动方向str=in.readLine();if(str!=null && str.equals("direction")){ str=in.readLine();if(str!=null){direction=Integer.parseInt(str);}}//读取总分str=in.readLine();if(str!=null && str.equals("score")){ str=in.readLine();if(str!=null){score=Integer.parseInt(str);}}//读取当前食物剩余分值str=in.readLine();if(str!=null && str.equals("time")){str=in.readLine();if(str!=null){time=Integer.parseInt(str);}}//关闭流in.close();clock.stop();repaint(); //重绘窗体} catch (FileNotFoundException e) {JOptionPane.showMessageDialog(this, "文件未找到");}catch(Exception ee){}}2.2.6英雄排行榜的设计2.2.6.1排行榜的构造:public ListFrame(){//构造函数setTitle("排行版");setLayout(new BorderLayout());title=new JButton("英雄排行榜");add(BorderLayout.NORTH,title);title.setFocusable(false);for(int i=0;i<10;i++){tabledata[i][0]=String.valueOf(i+1);for(int j=1;j<3;j++){tabledata[i][j]="";}}2.2.6.2排行榜的排行记录与顺序:public static void main(String[] args) {new ListFrame();}//显示记录public static void showList(){new ListFrame().table.setEnabled(false);}//插入一条新的记录public static void insertNewData(int score){ListFrame listwin=new ListFrame();Object[][] obj=listwin.tabledata;boolean over=false;for(int i=0;i<10;i++){String str=(String)obj[i][2];if(str.equals("")){obj[i][2]=score;//插入新的记录obj[i][1]="input your name";over=true;listwin.currentrow=i;break;}int data=Integer.parseInt(str);if(score >= data){for(int j=9;j>i;j--){//依次后移下面的数据obj[j][2]=obj[j-1][2];obj[j][1]=obj[j-1][1];}obj[i][2]=score;obj[i][1]="input your name";over=true;listwin.currentrow=i;break;}}if(!over){//没有超过以前的记录listwin.table.setEnabled(false);//不可编辑return;}listwin.table.isCellEditable(listwin.currentrow, 1);listwin.table.editCellAt(listwin.currentrow, 1);//选中当前单元格JTextFieldeditor=(JTextField)listwin.table.getCellEditor().getTableCellEditorComponent(listwin .table, listwin.table.getValueAt(listwin.currentrow, 1), true, listwin.currentrow, 1);editor.selectAll();}2.2.6.3排行榜记录文件的读取:public void checkFile(String filename){//检查Data 目录是否存在if(new File("Data").exists()){}else{new File("Data").mkdir();//创建Data 目录}//检查指定文件是否存在listfile=new File("Data",filename);if(listfile.exists()){//文件已经存在}else{ //文件不存在创建新的文件try{listfile.createNewFile();}catch(Exception e){JOptionPane.showMessageDialog(this, "创建排名文件时发生错误!");}}}//从文件中读取排名信息public void readFromFile(String filename){checkFile(filename);try{//读取排名信息文件iostream=new BufferedReader(new FileReader(listfile));String strline=iostream.readLine();int row=0;while(strline!=null){String str[]=strline.split("#");//信息以#分隔成name 和score 两部分if(str.length!=2){JOptionPane.showMessageDialog(this, "读入排名文件时发生错误");return;}tabledata[row][1]=str[0];//姓名tabledata[row][2]=str[1];//分数row++;if(row >= 10)break;strline=iostream.readLine();//读取下一行}iostream.close();//关闭流}catch(Exception ee){System.out.println(ee);}}//将数据写入文件public void writeDataToFile(){try{BufferedWriter write=new BufferedWriter(new FileWriter(listfile));for(int i=0;i<10;i++){String str=tabledata[i][1]+"#"+tabledata[i][2]+"\n";if(str.equals("#\n"))break;write.write(str);}write.close();}catch (Exception e) {}}3.开发平台产品版本:NetBeans IDE 6.1 (Build 200805300101)Java:1.6.0_07; Java HotSpot(TM) Client VM 10.0-b23系统:Windows Vista 版本 6.0 运行于x86 上; GBK; zh_CN (nb)4.测试与发布4.1运行测试过程4.1.1开始新游戏4.1.2游戏运行4.1.3 游戏结束4.1.4变化游戏难度4.1.5游戏排行榜4.1.6游戏存取档4.2测试结果游戏运行状况良好,未发现bug。
java贪吃蛇课程设计

java贪吃蛇课程设计1设计⽬的1.1背景近年来,Java作为⼀种新的编程语⾔,以其简单性、可移植性和平台⽆关性等优点,得到了⼴泛地应⽤,特别是Java与万维⽹的完美结合,使其成为⽹络编程和嵌⼊式编程领域的⾸选编程语⾔。
JBuilder是Borland公司⽤于快速开发Java应⽤的⼀款优秀的集成开发环境,它以其友好的开发界⾯、强⼤的组件⽀持等优点,得到⼴⼤程序员的接受和认可。
“贪吃蛇”游戏是⼀个经典的游戏,它因操作简单、娱乐性强⽽⼴受欢迎。
本⽂基于Java技术和JBuilder开发环境,开发了⼀个操作简单、界⾯美观、功能较齐全的“贪吃蛇”游戏。
整个游戏程序分为⼆个功能模块,六个类模块,实现了游戏的开始、暂停、结束。
通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的⽬的。
本⽂在介绍Java相关技术和国内外发展现状的基础上,对“贪吃蛇”游戏的整个⽣命周期的各个开发阶段进⾏了详细地介绍。
⾸先,分析了开发本游戏软件的可⾏性,重点分析本设计所采⽤的技术的可⾏性。
其次,从游戏主界⾯等⼏⽅⾯,分析了本游戏的功能需求;从可使⽤性和安全性⽅⾯分析了属性需求。
然后,进⾏了游戏的概要设计和详细设计,这也是本⽂的重点。
概要设计给出⼆个功能模块的主框架以及六个类模块的函数调⽤关系;详细设计介绍了Java2标准运⾏环境的配置,重点给出各个类模块的程序流程图以及UML图,列表介绍了各个类包含的变量、使⽤的⽅法,展⽰了游戏的界⾯。
为了保证程序代码的正确性和功能实现的可靠性,本⽂还介绍了游戏软件的程序调试过程和功能测试结果。
1.2⽬标本软件是针对贪吃蛇⼩游戏的JAVA程序,利⽤⽅向键来改变蛇的运⾏⽅向,空格键暂停或继续游戏,并在随机的地⽅产⽣⾷物,吃到⾷物就变成新的蛇体,碰到壁或⾃⾝则游戏结束,否则正常运⾏。
2 总体设计2.1 设计思路本系统主要是完成贪吃蛇游戏的基本操作。
⽤户可以⾃⼰练习和娱乐。
本系统需要满⾜以下⼏点要求:(1) 利⽤⽅向键来改变蛇的运⾏⽅向。
java贪吃蛇课程设计

发展:1980年代,贪吃蛇游戏 在个人电脑和游戏机上流行
起源:1976年,由美国计算机 科学家Steve Wozniak发明
创新:1990年代,贪吃蛇游戏 在智能手机上出现,增加了新 的玩法和功能
现状:贪吃蛇游戏仍然是一款 受欢迎的休闲游戏,被广泛应
用于各种平台和设备上
PART THREE
游戏开始:玩家点 击开始按钮,游戏 开始
技术趋势:关注最新的Java游戏开发技术和工具,如Unity、Unreal Engine等 创新思维:鼓励创新思维,开发具有独特性和吸引力的游戏 团队合作:加强团队合作,提高游戏开发效率和质量 市场调研:了解市场需求,开发符合用户喜好的游戏
增加游戏难度:增加关卡、增加敌人数量等 增加游戏元素:增加道具、增加角色等 增加社交元素:增加排行榜、增加好友系统等 增加游戏模式:增加多人模式、增加合作模式等
优化算法:使用高效的算法,如动态规划、贪心算法等,提高游戏运行速度 减少内存占用:优化数据结构,减少不必要的内存占用,提高游戏运行效率 优化界面设计:使用简洁、清晰的界面设计,提高用户体验 增加游戏功能:增加游戏难度选择、排行榜等功能,提高用户粘性和游戏趣味性
PART SIX
单元测试:针对单个模块或功能进行测试, 确保其正确性和稳定性
集成测试:将多个模块或功能集成在一起 进行测试,确保其兼容性和稳定性
系统测试:对整个游戏系统进行测试,确 保其功能和性能满足设计要求
压力测试:模拟大量用户同时访问游戏, 确保游戏在高负载情况下的稳定性和性能
自动化测试:使用自动化工具进行测试, 提高测试效率和准确性
性能测试:测试游戏的性能指标,如响应 时间、吞吐量等,确保其满足设计要求
汇报人:
PART SEVEN
Java课程设计之贪吃蛇

Java课程设计之贪吃蛇安阳工学院计算机学院JAVA课程设计报告专业班级: 学生姓名: 学生学号: 小组成员: 指导教师姓名: 宋强目录一选题目的与系统概述 (1)1.1选题目的 (1)1.2系统概述.................................................................................1 二系统可行性分析与相关技术背景分析 (2)2.1系统可行性分析 (2)2.2相关技术背景分析.....................................................................2 三系统设计与关键技术 (3)3.1系统设计 (3)3.2关键技术.................................................................................5 四系统测试与操作实施方法.........................................................9 五系统设计总结与回顾 (11)六参考文献 (12)一、选题目的与系统概述1.1 选题目的贪吃蛇游戏是一款非常经典的游戏,因为它比较简单有趣,无论老少都比较适合。
贪吃蛇的设计对每一个Java语言设计者进行语言提高和进阶都是一个很好的锻炼机会。
在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。
因此,如何设计和开发好这个贪吃蛇游戏,对于提高Java开发水平和系统的设计能力有极大的帮助。
在设计开发过程中,需要处理好各个类之间的继承关系,还要处理各个类相应的封装,并且还要协调好各个模块之间的逻辑依赖关系和数据通信关系。
正是因为如此,本次设计的目的在于学习Java程序设计基本技术,学习用Netbeans开发Java程序的相关技术,熟悉游戏“贪吃蛇”的需求,熟悉项目开发的完整过程。
java课程设计贪吃蛇大学论文

课程设计说明书课程名称:Java语言程序设计设计题目:学生成绩管理系统院系:计算机科学与信息工程学院学生姓名:肖文学号:14031010141专业班级:计算机科学与技术(14嵌入)指导教师:张阳2015 年12月27 日课程设计任务书设计题目贪吃蛇小游戏程序学生姓名肖文所在院系计科专业、年级、班14计科嵌入设计要求:1. 贪吃蛇游戏是大家很常见的小游戏,在生活工作之余大家可以玩它,已达到放松各种压力的目的。
2. 游戏可以进行升级,也就是增加吃食物的难度,以便使大家更有挑战性,不觉得太无趣。
3. 游戏界面大小可以任意指定,数据从文件读入。
4. 利用swing实现良好的GUI界面。
学生应完成的工作:1. 贪食蛇的前移算法主要是蛇身结点前移,后面的覆盖前面的蛇身结点。
依靠的调用编写的成员方法实现。
2. 在贪吃蛇中蛇头来控制蛇的移动方向,依靠的调用编写的成员方法实现。
3. 要求用户界面采用图形用户界面,影响方向键的控制。
4. 重复的调用paint()函数来实现对界面的重绘和食物的重置。
5. 源程序中要有充分的注释,报告中要有详细的流程图。
6. 运行的结果以及图形用户界面要进行屏幕拷贝,插入报告中。
幕拷贝,插入报告中。
参考文献阅读:1. 《Java语言程序设计》(美)Y·Daniel Liang 机械工业出版社2. 赵毅主编.跨平台程序设计语言——Java.西安:西安电子科技大学出版社,20063. 王路群.Java高级程序设计.北京:中国水利水电出版社,2006工作计划:1,12月21日,选择该课题,然后分析结构。
2,12月21日至25日开始编写各个模块。
3,12月28日至29日,对设计的系统进行测试以及进行修改。
4,12月30日,贪吃蛇完成。
任务下达日期:2015 年12月10 日任务完成日期:2015 年12月24 日指导教师(签名):学生(签名):贪吃蛇小游戏摘要:贪吃蛇是家喻户晓的益智类小游戏,选择这题目一是为了将自己所学的知识加以运用,二是一直以来贪吃蛇这个游戏深深的吸引着我,它的制作方法对于提前的我而言都是神秘的。
贪吃蛇java实验报告doc

贪吃蛇java实验报告篇一:JAVA贪吃蛇课程设计报告《Java应用开发》课程设计报告题目:指导老师:姓名:专业:班级:日期:JAVA小游戏 - 贪吃蛇目录一、系统总体设计 ................................. 1 (一)设计目标及完成功能 ........................ 1 (二)系统结构设计 .............................. 1 二、详细设计 ..................................... 2(一) 界面设计 ................................... 2 (二) 系统设计 ................................... 4 (三) 关键技术及算法 ............................. 6 四、测试 ......................................... 7五、安装使用说明 ................................. 7总结(体会) ..................................... 8参考文献 .. (8)一、系统总体设计(一)设计目标及完成功能本软件是针对贪吃蛇小游戏的JAVA程序,利用上、下、左、右方向键来改变蛇的运动方向,长按某个方向键后,蛇的运动速度会加快,在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常进行游戏,在到达固定的分数后,游戏速度会加快。
1.窗口功能说明:设计了三个窗口,分别是游戏主窗口,成绩窗口,游戏帮助和关于作者窗口。
2.菜单栏分别为:游戏菜单和帮助菜单其中,游戏菜单包括开始游戏和退出游戏两项;帮助菜单包括游戏帮助和关于作者两项。
(二)系统结构设计图1-1 系统结构图二、详细设计(一) 界面设计贪吃蛇游戏的基本运行界面(1)生成初始界面:图2-1 初始界面(2)游戏菜单栏:图2-2 游戏菜单(2)积分排行菜单栏:图2-3 积分排行菜单(3)进行游戏界面:点击“游戏”,进入游戏菜单,选择“开始游戏”,或者使用快捷键“Ctrl+O”来开始游戏。
javaeclipse贪吃蛇课程设计

javaeclipse贪吃蛇课程设计一、课程目标知识目标:1. 学生能理解Java语言面向对象编程的基本概念,如类、对象、方法等;2. 学生能掌握Eclipse集成开发环境的基本操作,如创建项目、编写代码、调试程序等;3. 学生能了解贪吃蛇游戏的基本逻辑和实现方法。
技能目标:1. 学生能运用Java语言编写简单的面向对象程序,实现贪吃蛇游戏的基本功能;2. 学生能运用Eclipse集成开发环境进行代码编写、调试和运行;3. 学生能运用所学知识解决实际问题,提高编程实践能力。
情感态度价值观目标:1. 学生通过课程学习,培养对编程的兴趣和热情,树立编程学习的自信心;2. 学生在团队协作中,提高沟通与协作能力,培养集体荣誉感;3. 学生在游戏设计过程中,锻炼逻辑思维能力,培养解决问题的耐心和毅力。
分析课程性质、学生特点和教学要求:1. 课程性质:本课程为Java语言编程实践课,结合贪吃蛇游戏设计,提高学生的编程兴趣和实际操作能力;2. 学生特点:学生为具有一定Java基础知识的初中生,对编程有一定兴趣,喜欢动手实践;3. 教学要求:注重理论与实践相结合,以学生为主体,充分调动学生的积极性,培养学生的编程思维和团队协作能力。
将目标分解为具体的学习成果:1. 学生能独立完成贪吃蛇游戏的编写和调试;2. 学生能通过小组合作,共同优化贪吃蛇游戏的代码和功能;3. 学生在课程结束后,能对Java面向对象编程有更深入的理解,提高编程实践能力。
二、教学内容1. Java面向对象编程基本概念回顾:类、对象、方法、属性等;2. Eclipse集成开发环境使用:项目创建、代码编写、调试与运行;3. 贪吃蛇游戏逻辑分析:游戏规则、移动原理、食物生成、得分与结束条件;4. 游戏界面设计:窗口创建、绘图面板、键盘事件监听;5. Java编程实现贪吃蛇游戏:蛇的移动、食物的随机生成、得分与游戏结束判断;6. 游戏优化与拓展:碰撞检测、蛇身长度变化、速度提升、音效添加。
java贪吃蛇毕业设计

java贪吃蛇毕业设计Java贪吃蛇毕业设计毕业设计是大学生们在校园生活的最后一道考验,也是他们展示自己所学知识和能力的机会。
对于计算机科学专业的学生而言,选择一个合适的主题进行毕业设计是至关重要的。
本文将探讨一个有趣且具有挑战性的毕业设计主题:Java贪吃蛇。
1. 贪吃蛇的背景介绍贪吃蛇是一款经典的游戏,最早出现在20世纪70年代。
游戏的玩法简单,玩家控制一条蛇在有限的空间内移动,吃掉食物以增加身体长度,同时要避免碰到自己的身体或是墙壁。
随着时间的推移,蛇的移动速度会逐渐加快,增加游戏的难度。
2. 设计思路在设计Java贪吃蛇毕业项目时,需要考虑以下几个方面:2.1 游戏界面设计游戏界面是玩家与游戏进行交互的窗口,需要设计一个美观且易于操作的界面。
可以使用Java的图形库,如Swing或JavaFX来实现。
2.2 蛇的移动和控制蛇的移动是游戏的核心,需要设计合适的算法来控制蛇的移动方向和速度。
可以使用键盘监听器来捕捉玩家的按键操作,并根据按键来改变蛇的方向。
2.3 食物生成和吃掉食物的生成和吃掉是游戏的重要元素。
需要设计一个随机生成食物的算法,并判断蛇是否吃到了食物。
当蛇吃到食物时,需要增加蛇的长度并生成新的食物。
2.4 碰撞检测碰撞检测是游戏的关键部分,需要判断蛇是否碰到了自己的身体或是墙壁。
如果蛇碰到了自己的身体或是墙壁,游戏结束。
3. 实现过程在实现Java贪吃蛇毕业项目时,可以按照以下步骤进行:3.1 确定游戏界面和基本功能首先,设计游戏界面,包括蛇、食物和墙壁的显示。
然后,实现蛇的移动和控制功能,包括键盘监听器和蛇的移动算法。
3.2 实现食物生成和吃掉功能接下来,设计食物的生成算法,并判断蛇是否吃到了食物。
当蛇吃到食物时,增加蛇的长度,并生成新的食物。
3.3 实现碰撞检测最后,设计碰撞检测算法,判断蛇是否碰到了自己的身体或是墙壁。
如果蛇碰到了自己的身体或是墙壁,游戏结束。
4. 拓展功能除了基本功能之外,还可以考虑添加一些拓展功能来提升游戏的趣味性和挑战性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JAVA设计贪吃蛇游戏 1.课程设计目的 《JAVA程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
2.设计方案论证 2.1设计思路 贪吃蛇游戏设计与实现,主要分为以下二个模块:游戏主界面模块和游戏控制模块。在此只实现游戏的游戏主界面模块、游戏控制模块。并且只是实现移动速度、暂停、重新开始等功能。 游戏主界面模块: 游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、新生方块的预览、游戏速度控制按钮、暂停游戏按钮、重新开始游戏按钮以及游戏排行榜按钮。从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。 游戏控制模块: 这个模块是游戏的中心环节,主要完成控制游戏的速度、暂停、重新开始等功能。为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。 本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的速度控制、游戏的暂停、游戏的退出等功能,分为: 游戏主界面模块、游戏控制模块以二个模块。 性能: 本软件在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。 2.2概要设计 2.3.1自定义类说明 类名:Exception 作用:用来处理当蛇撞到墙或自己的身体时程序的运行 继承的父类:GreedSnake类 实现的接口:没有
2.3详细设计 2.3.1程序概述 本程序是一个利用Java应用软件制作的贪食蛇小游戏。 在游戏过程中,用户通过点击小键盘区的方向键来控制蛇的运行方向;通过Pageup和pagedown键来控制蛇的移动速度,每单击一次,蛇的移动速度改变一次,改变频率为0.75。游戏运行过程中,如果想暂停,只需要按Space或P键即可。重新开始游戏的按键为Enter、S或R。当蛇没有吃到食物且碰到墙壁或自己的身体时游戏结束。 本程序的另一个功能是在程序运行窗口的左上角显示,用户在游戏过程中所得的分数,不过缺点是无法保存分数。
2.4.2程序流程图 本次游戏设计的处理流程如图1所示。 2.3.3 总设计模块的划分 根据游戏需求中游戏所要实现的功能,整个游戏分为二个模块进行具体的设计,如图2所示。
单击“Enter、S或R”按钮, 游戏开始,蛇开始随机。
键盘操作:
向上 左移
右移 向下
没有吃到食物且蛇碰到边界 单击“确定” 游戏结束 游戏中途欲中断,稍后继续游戏
单击“Space或P暂停游戏”
进入游戏画面 再次单击开始Enter、S或R按钮,游戏恢复
图1 游戏处理流程图
游戏控制模块的主要框架如图3所示。
游戏移动速度功能控制:点击“PageUp, PageDown”按钮,蛇的移动速度就会改变,每点击一次,速度的改变频率为0.75。 游戏暂停控制:点击“Space或P暂停游戏”按钮,游戏暂停;再单击,游戏继续。 游戏重新开始控制:点击“Enter、S或R”键后,系统图重新载入,即游戏重新
贪吃蛇游戏 游戏主界面模块
游戏控制模块
图2 游戏总设计模块
游戏控制模块 游戏的移动速度功能 游戏的暂停功能 游戏的重新开始
图3游戏控制模块框架 开始。 2.3.4类、方法、属性说明
(1)成员变量 表1 主要成员变量(属性) 成员变量描述 变量类型 名称
文件菜单中子菜单“新建” JMenuItem mFile_New 编辑菜单中子菜单“撤消” JMenuItem mEdit_Undo 格式菜单中子菜单“颜色” JMenu formatMenu_Color 帮助菜单中子菜单“帮助主题” MenuItem mHelp_HelpTopics
(2)方法 表2 主要方法 方法名 功能 备注
Notepad4() 描述记事本 无 Text.setBackground(Color.white) 设置编辑区默认背景色 无
Text.setForeground(Color.black) 设置编辑区默认前景色 无 3.设计结果与分析 本程序在运行后,能够正常的相应按键事件。由于程序的主要部分已经集成为一个对象SnakeModel,所以利用键盘就可以实现操作。蛇前行的过程中,可以任意向其左或右方向改变方向,但按其前进方向和前进的反方向都没有反应。点击PageUp, PageDown键后,蛇的移动速度会根据点击的次数而改变。每点击一次,速度的改变频率为0.75。点击Space或P键后游戏就暂停了。点击Enter或R或S键后系统则重新载入,即游戏重新开始。运行结果如下图4所示:
图4 程序运行图 当蛇没有吃到食物且碰到边界或碰撞到自己的身体时,游戏结束,此时得分为0。如果想重新开始即按ENTER或S键,运行结果如下图5所示:
图5 程序结束图 程序异常处理 在蛇的运行线程过程中,当蛇撞到墙或自己的身体时,将抛出一个Exception类的异常对象,然后使用try-catch去捕捉这个异常, 异常的处理如下: try{ Thread.sleep(timeInterval); } catch(Exception e) { break; } 4.心得体会 通过这次课程设计,我对这学期所学的JAVA语言程序设计有一个更深刻的了解,将所学的知识应用于实践,由于所学知识有限,为了使游戏能够实现自己预先的构想,我通过上网和去图书馆找程序,比较好的流程图及功能模块,不断阅读修改代码使程序达到预期所要实现的目标,完成课程设计后,可以感觉到自己对Java程序的又有了新的认识。 在做Java设计之前也有做过其他的课程设计,大多规模很小。在数据库、各种应用软件和游戏中,我仍觉得对游戏的设计有极大的热情。因为其各个模块间的联系十分紧密,代码重复执行率高,当经过无数次的调试、修改后,能最终看到成品,有无比自豪的心情。大学期间做过图书馆管理程序等简单的数据库管理系统的课程设计,思想大致相似,变化范围有限,没有太多自己可发挥的余地。综合运用以前所学习的知识,设计一个JAVA手机游戏,并能实现以下的功能:游戏暂停、游戏重新开始、游戏的结束。总之,通过本次的课程设计,使我平时学到的理论知识得到了很好地升华,理论与实际得到一次很好的结合,为我今后参加工作打下了坚实的基础,使我受益匪浅。
5.附录 import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*;
//Main Class public class GreedSnake extends KeyAdapter{ JFrame mainFrame; Canvas paintCanvas; JLabel labelScore;//计分牌 SnakeModel snakeModel=null;// 蛇 public static final int DEFAULT_WIDTH=500; public static final int DEFAULT_HEIGHT=300; public static final int nodeWidth=10; public static final int nodeHeight=10;
//GreedSnake():初始化游戏界面 public GreedSnake(){ //设置界面元素 mainFrame=new JFrame("贪吃蛇游戏"); Container cp=mainFrame.getContentPane(); labelScore=new JLabel("所得分数为:",JLabel.CENTER); cp.add(labelScore,BorderLayout.NORTH); paintCanvas=new Canvas(); paintCanvas.setSize(DEFAULT_WIDTH+1,DEFAULT_HEIGHT+1); paintCanvas.addKeyListener(this); cp.add(paintCanvas,BorderLayout.CENTER); JPanel panelButtom=new JPanel(); panelButtom.setLayout(new BorderLayout()); JLabel labelHelp;// 帮助信息 labelHelp=new JLabel("按 PageUP 或 PageDown 键改变速度",JLabel.CENTER); panelButtom.add(labelHelp,BorderLayout.NORTH); labelHelp=new JLabel("按 Enter 或 S 键重新开始游戏",JLabel.CENTER); panelButtom.add(labelHelp,BorderLayout.CENTER); labelHelp=new JLabel("按 SPACE 键或 P 键暂停游戏",JLabel.CENTER); panelButtom.add(labelHelp,BorderLayout.SOUTH); cp.add(panelButtom,BorderLayout.SOUTH); mainFrame.addKeyListener(this); mainFrame.pack(); mainFrame.setResizable(false); mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); mainFrame.setVisible(true); begin(); }
//keyPressed():按键检测 public void keyPressed(KeyEvent e){ int keyCode=e.getKeyCode(); if(snakeModel.running)