面向对象课程设计--java__贪吃蛇

合集下载

面向对象课程设计--基于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课程设计贪吃蛇项目

java课程设计贪吃蛇项目一、教学目标本节课的教学目标是让学生掌握Java编程语言的基本语法和面向对象编程思想,通过编写Java代码实现一个简单的贪吃蛇游戏。

具体目标如下:1.知识目标:–了解Java语言的基本语法和结构;–掌握面向对象编程的基本概念和方法;–熟悉Java中的常用数据结构和算法。

2.技能目标:–能够使用Java语言编写简单的程序;–能够运用面向对象编程思想解决实际问题;–具备基本的代码调试和排错能力。

3.情感态度价值观目标:–培养学生的编程兴趣和自信心;–培养学生团队合作和解决问题的能力;–培养学生勇于尝试和不断创新的精神。

二、教学内容本节课的教学内容主要包括以下几个部分:1.Java语言基本语法:介绍Java程序的基本结构,包括类、方法、变量等概念,以及如何编写和运行Java程序。

2.面向对象编程:讲解类的定义和创建,对象的创建和使用,以及封装、继承和多态等面向对象编程的基本概念。

3.贪吃蛇游戏设计:分析贪吃蛇游戏的需求,设计游戏类和游戏界面,实现游戏的基本功能,包括蛇的移动、食物的生成和消亡、游戏结束条件等。

4.算法实现:讲解如何在Java中实现常用的数据结构和算法,如数组、链表、排序等,并应用于贪吃蛇游戏中。

三、教学方法本节课采用以下教学方法:1.讲授法:讲解Java语言的基本语法和面向对象编程思想,让学生掌握编程的基本概念和方法。

2.案例分析法:通过分析贪吃蛇游戏的需求,引导学生思考如何设计和实现游戏功能,培养学生的编程思维和问题解决能力。

3.实验法:让学生动手编写Java代码,实现贪吃蛇游戏,培养学生的实际编程能力和代码调试能力。

4.小组讨论法:鼓励学生之间相互讨论和交流,共同解决问题,培养学生的团队合作和沟通能力。

四、教学资源本节课所需的教学资源包括:1.教材:《Java编程思想》或《Java核心技术》等;2.参考书:《Java编程指南》或《Java编程实践》等;3.多媒体资料:PPT、教学视频等;4.实验设备:计算机、网络等。

javat贪吃蛇课程设计

javat贪吃蛇课程设计

javat贪吃蛇课程设计一、课程目标知识目标:1. 学生能理解Java基础语法,掌握面向对象编程的基本概念。

2. 学生能掌握贪吃蛇游戏的逻辑结构和开发流程。

3. 学生能运用所学知识,实现一个具有基本功能的贪吃蛇游戏。

技能目标:1. 学生能运用Java编程语言,进行程序设计和代码编写。

2. 学生能运用面向对象思想,进行游戏角色和场景的设计与实现。

3. 学生能通过编写代码,实现游戏中的碰撞检测、分数统计等基本功能。

情感态度价值观目标:1. 学生培养对编程的兴趣,激发学习主动性和创新精神。

2. 学生通过团队协作,培养沟通能力和合作精神。

3. 学生在游戏开发过程中,体会编程解决问题的乐趣,提高自信心。

课程性质分析:本课程为信息技术课程,以Java编程语言为基础,结合面向对象编程思想,设计贪吃蛇游戏。

课程注重理论与实践相结合,强调学生的动手实践能力。

学生特点分析:学生为七年级学生,具有一定的信息技术基础,对编程有一定的好奇心和兴趣。

学生在这个阶段,对新知识接受能力强,但注意力容易分散,需要通过有趣的实践项目来吸引其注意力。

教学要求:1. 教师应注重引导,让学生在实践中掌握Java编程基础和面向对象编程思想。

2. 教师应关注学生的个体差异,提供个性化的指导,提高学生的编程能力。

3. 教师应注重培养学生的团队协作能力,引导学生在合作中学习,共同完成贪吃蛇游戏开发。

二、教学内容1. Java基础知识回顾:变量、数据类型、运算符、控制流程(条件语句、循环语句)。

2. 面向对象编程基础:类与对象、构造方法、属性、方法、封装、继承、多态。

3. 游戏设计原理:游戏循环、场景绘制、角色控制、碰撞检测、分数统计。

4. Java图形用户界面(GUI):Swing图形用户界面编程,窗口、面板、按钮、键盘事件处理。

5. 贪吃蛇游戏开发:a. 游戏框架搭建:创建游戏窗口,设计游戏循环。

b. 角色对象设计:定义蛇和食物类,实现移动、增长和绘制。

javaeclipse贪吃蛇课程设计

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)(一)设计目标及完成功能 (1)(二)系统结构设计 (1)二、详细设计 (2)(一)界面设计 (2)(二)系统设计 (5)(三)关键技术及算法 (6)四、测试 (7)五、安装使用说明 (7)总结(体会) (8)参考文献 (9)一、系统总体设计(一)设计目标及完成功能本软件是针对贪吃蛇小游戏的JAVA程序,利用上、下、左、右方向键来改变蛇的运动方向,长按某个方向键后,蛇的运动速度会加快,在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常进行游戏,在到达固定的分数后,游戏速度会加快。

1.窗口功能说明:设计了三个窗口,分别是游戏主窗口,成绩窗口,游戏帮助和关于作者窗口。

2.菜单栏分别为:游戏菜单和帮助菜单其中,游戏菜单包括开始游戏和退出游戏两项;帮助菜单包括游戏帮助和关于作者两项。

(二)系统结构设计图1-1 系统结构图二、详细设计(一) 界面设计贪吃蛇游戏的基本运行界面(1)生成初始界面:图2-1 初始界面(2)游戏菜单栏:图2-2 游戏菜单(2)积分排行菜单栏:图2-3 积分排行菜单(3)进行游戏界面:点击“游戏”,进入游戏菜单,选择“开始游戏”,或者使用快捷键“Ctrl+O”来开始游戏。

红色为贪吃蛇的身体部分,黑色方块为食物。

得分后,分数和得到食物数在左上角处实时显示。

图2-4 进行游戏(5)游戏结束界面:当蛇撞到墙壁或者自身的时候游戏结束。

图2-5 游戏结束界面(二) 系统设计(三) 关键技术及算法程序关键在于表示蛇的图形及蛇的移动。

用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。

移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。

java贪吃蛇课程设计报告总结

java贪吃蛇课程设计报告总结

课程设计报告:Java贪吃蛇游戏1. 背景贪吃蛇是一款经典的街机游戏,通过控制蛇的移动,吃掉食物,使蛇变得越来越长,直到触碰到边界或自己的身体为止。

该游戏在20世纪80年代流行起来,并成为了一种代表性的休闲娱乐方式。

贪吃蛇游戏可以提高玩家的反应能力、体力协调和空间感知能力。

本次课程设计旨在通过使用Java编程语言,设计实现一个简化版的贪吃蛇游戏,以加深学生对面向对象程序设计的理解和应用,并培养学生的逻辑思维能力和团队协作精神。

2. 分析2.1 游戏规则分析在贪吃蛇游戏中,玩家通过控制蛇的移动方向,使蛇吃到食物从而变长,直到游戏结束。

具体规则如下:•初始状态下,蛇由一个长度为3的身体组成,呈水平放置。

•蛇的移动方式为每个时间单位(通常为固定时间间隔)前进一格,移动方向由玩家通过键盘输入控制。

•蛇在吃到食物后,身体变长一节,并在地图上随机生成新的食物。

•蛇头碰到地图边界或自身身体的任意部分,游戏结束。

2.2 功能模块分析基于对游戏规则的分析,可以将贪吃蛇游戏的功能模块划分如下:•游戏初始化模块:初始化地图、蛇的初始位置和长度、生成初始食物等。

•用户输入模块:读取用户的键盘输入,控制蛇的移动方向。

•游戏逻辑模块:根据用户输入和游戏规则,更新蛇的位置、判断是否吃到食物或撞到障碍物等。

•地图绘制模块:将地图、蛇、食物等元素绘制到屏幕上。

•游戏循环模块:根据固定时间间隔循环执行游戏逻辑、用户输入和地图绘制等操作。

•游戏结束模块:在游戏结束时输出游戏得分等信息。

2.3 设计思路基于上述功能模块的分析,我设计了如下的实现思路:1.使用Java面向对象编程的思想,抽象出地图、蛇、食物等对象,并为其封装相应的属性和方法。

2.在游戏初始化模块中,创建地图对象、蛇对象,初始化位置和长度,并生成初始食物。

3.在用户输入模块中,利用Java的键盘事件监听机制,获取用户的方向输入,并通过调用蛇对象的移动方法实现控制蛇的移动方向。

JAVA开放性实验报告贪吃蛇

JAVA开放性实验报告贪吃蛇

JAVA开放性实验报告贪吃蛇实验目的:本实验旨在利用Java语言实现一个经典的贪吃蛇游戏,通过实践提升对面向对象程序设计的理解和应用能力,加深对Java语言的熟练程度,并提高解决问题的能力和编程实践经验。

实验内容:1.设计游戏界面:通过Java中的Swing库实现游戏窗口的设计,包括游戏区域、游戏开始按钮、得分显示等。

2.实现游戏逻辑:设计贪吃蛇的移动规则,食物的生成和吃掉判定,碰撞检测等游戏逻辑。

同时实现游戏的主循环,控制游戏的进行。

3.实现键盘控制:通过监听键盘事件,实现玩家控制贪吃蛇的移动方向。

4.设计游戏机制:设置游戏的难度等级,增加贪吃蛇的移动速度、食物生成间隔等参数,使游戏更具挑战性。

5.设计游戏结束逻辑:当贪吃蛇头碰到墙壁或自身时,游戏结束并显示得分。

玩家可以选择重新开始游戏或退出。

实验步骤:1.设计游戏界面:创建一个JFrame窗口,在窗口中添加游戏画布,开始按钮和得分显示等组件。

2.实现游戏逻辑:设计Snake类和Food类,表示贪吃蛇和食物。

通过ArrayList存储贪吃蛇的身体节点,并实现移动、吃食物等方法。

3.实现键盘控制:通过实现KeyListener接口来监听键盘事件,根据按键控制贪吃蛇的移动方向。

4.设计游戏机制:设置贪吃蛇的移动速度、食物生成间隔等参数,根据难度级别逐步增加,使游戏更具挑战性。

5.设计游戏结束逻辑:当贪吃蛇头碰到墙壁或自身时,游戏结束并显示得分。

提供重新开始游戏和退出游戏的选项。

实验结果:经过实验设计和编码实现,成功完成了Java贪吃蛇游戏的开发。

游戏界面美观,操作流畅,游戏逻辑完整,玩家能够通过控制贪吃蛇吃到食物并获得得分。

随着游戏的进行,贪吃蛇会不断变长,玩家需要避开障碍,控制蛇头移动,体验游戏的乐趣和挑战。

实验总结:通过本次实验,我深入学习了Java语言的面向对象编程思想和应用,掌握了Swing库的使用方法,加深了对Java语言的理解和应用。

贪吃蛇游戏java课程设计

贪吃蛇游戏java课程设计

贪吃蛇游戏java课程设计一、课程目标知识目标:1. 让学生掌握Java基本语法和面向对象编程思想;2. 让学生了解贪吃蛇游戏的基本规则和逻辑;3. 让学生掌握使用Java编写贪吃蛇游戏的方法和技巧。

技能目标:1. 培养学生独立分析问题、解决问题的能力;2. 培养学生运用所学知识进行实际项目开发的能力;3. 培养学生团队协作、沟通表达的能力。

情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发学生主动学习的动力;2. 培养学生面对困难和挑战时,保持积极的心态和坚持不懈的精神;3. 培养学生遵守编程规范,养成良好的编程习惯。

课程性质:本课程为实践性较强的课程,旨在通过贪吃蛇游戏的设计与实现,让学生将所学的Java编程知识运用到实际项目中,提高学生的编程能力和实际操作能力。

学生特点:学生已具备一定的Java编程基础,对游戏开发有一定兴趣,但可能缺乏实际项目经验。

教学要求:注重理论与实践相结合,引导学生主动探究,培养其独立解决问题的能力。

在教学过程中,关注学生的个体差异,提供个性化指导,确保每位学生都能在课程中取得进步。

将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. Java基本语法复习:变量、数据类型、运算符、控制结构等;2. 面向对象编程:类与对象、继承、封装、多态等;3. Java图形用户界面(GUI):Swing组件、事件处理、布局管理器等;4. 游戏设计基础:游戏循环、碰撞检测、游戏逻辑等;5. 贪吃蛇游戏设计与实现:游戏规则、界面设计、蛇的移动与增长、食物的生成与消失、得分与结束条件等。

教学大纲安排如下:第一周:Java基本语法复习,面向对象编程基础;第二周:Java图形用户界面(GUI)设计与事件处理;第三周:游戏设计原理与贪吃蛇游戏分析;第四周:贪吃蛇游戏设计与实现,包括界面设计、游戏逻辑开发等;第五周:课程总结与展示,学生互评、教师点评。

教学内容关联教材章节:1. Java基本语法复习:教材第1-3章;2. 面向对象编程:教材第4-6章;3. Java图形用户界面(GUI):教材第7章;4. 游戏设计基础:教材第8章;5. 贪吃蛇游戏设计与实现:教材第9章及课外拓展内容。

java贪吃蛇课程设计

java贪吃蛇课程设计

java贪吃蛇课程设计一、课程目标知识目标:1. 让学生掌握Java基础语法,包括变量、数据类型、运算符、控制结构等。

2. 让学生理解面向对象编程的基本概念,如类、对象、封装、继承、多态。

3. 让学生学会使用Java编写图形用户界面(GUI)程序,运用事件处理机制。

技能目标:1. 培养学生运用Java编程解决问题的能力,特别是解决逻辑性和结构性问题。

2. 培养学生分析问题、设计算法、编写程序、调试程序的能力。

3. 提高学生的团队协作能力,通过分组合作完成课程设计。

情感态度价值观目标:1. 培养学生对编程的兴趣,激发学生学习Java的热情。

2. 培养学生勇于尝试、不怕失败的精神,面对编程难题保持积极的态度。

3. 培养学生的创新意识,鼓励他们在编程实践中尝试新思路、新方法。

分析课程性质、学生特点和教学要求,本课程目标具体、可衡量,旨在让学生通过学习Java编程,完成贪吃蛇游戏的设计与实现。

将目标分解为以下具体学习成果:1. 知识方面:学生能熟练运用Java语法和面向对象编程知识,掌握贪吃蛇游戏的基本逻辑。

2. 技能方面:学生具备编写、调试贪吃蛇游戏的能力,能通过团队协作解决问题。

3. 情感态度价值观方面:学生对编程产生浓厚兴趣,愿意主动探索、创新,培养良好的编程习惯。

二、教学内容根据课程目标,教学内容主要包括以下部分:1. Java基础语法:- 变量、数据类型、常量- 运算符、表达式、语句- 控制结构(顺序、分支、循环)2. 面向对象编程:- 类与对象- 封装、继承、多态- 抽象类与接口3. Java图形用户界面(GUI)编程:- AWT与Swing概述- 常用组件的使用- 事件处理机制4. 贪吃蛇游戏设计与实现:- 游戏逻辑分析- 界面设计与实现- 控制算法编写- 游戏优化与调试教学大纲安排如下:1. 第一周:Java基础语法学习,复习相关概念。

2. 第二周:面向对象编程知识学习,案例分析。

3. 第三周:Java GUI编程入门,编写简单的图形界面程序。

小游戏贪吃蛇课程设计报告

小游戏贪吃蛇课程设计报告
使用随机数生成器生 成蛇和食物的位置
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小游戏贪吃蛇课程设计报告

贪吃蛇java课程设计

贪吃蛇java课程设计

贪吃蛇java课程设计一、课程目标知识目标:1. 让学生掌握Java基本语法和编程逻辑,特别是面向对象编程思想。

2. 使学生理解二维数组在Java中的应用,学会使用二维数组构建游戏界面。

3. 帮助学生掌握事件处理机制,实现对游戏操作的反应。

技能目标:1. 培养学生运用Java语言编写简单游戏的能力,特别是贪吃蛇游戏的实现。

2. 让学生通过课程实践,掌握程序调试和错误处理的方法,提高解决问题的能力。

3. 培养学生团队协作能力,通过分组合作完成课程设计。

情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发学习积极性。

2. 培养学生勇于尝试、不怕失败的精神,提高克服困难的信心。

3. 引导学生认识到编程在现实生活中的应用价值,提高社会责任感。

课程性质:本课程为实践性较强的课程设计,以项目为导向,注重培养学生的动手能力和团队协作能力。

学生特点:学生具备一定的Java基础,对编程有一定了解,但实践经验不足,需要通过课程设计提高实际操作能力。

教学要求:结合学生特点,课程目标应具体、可衡量,注重理论与实践相结合,充分调动学生的主观能动性,提高学生的编程实践能力。

在教学过程中,将目标分解为具体的学习成果,以便于教学设计和评估。

二、教学内容1. Java基本语法和面向对象编程思想复习:回顾类和对象、继承、封装、多态等基本概念。

2. 二维数组及其应用:学习二维数组的定义、初始化和操作方法,结合贪吃蛇游戏界面设计进行讲解。

3. 事件处理机制:介绍事件监听器、事件对象、事件处理方法等,应用于贪吃蛇游戏操作。

4. 游戏设计原理:分析贪吃蛇游戏的规则、算法和数据结构,讲解如何实现游戏核心功能。

5. 编程实践:指导学生分组进行贪吃蛇游戏设计,从需求分析、设计、编码、调试到测试的全过程。

6. 教学大纲安排:- 第一周:Java基本语法和面向对象编程思想复习,介绍课程设计要求。

- 第二周:二维数组及其应用,设计贪吃蛇游戏界面。

java贪吃蛇游戏设计课程设计

java贪吃蛇游戏设计课程设计

java贪吃蛇游戏设计课程设计一、课程目标知识目标:1. 让学生掌握Java编程语言的基本语法和面向对象编程思想。

2. 使学生了解贪吃蛇游戏的基本规则和设计原理。

3. 帮助学生理解游戏开发中坐标系的应用、事件处理和循环结构的使用。

技能目标:1. 培养学生运用Java语言编写简单游戏的能力。

2. 提高学生分析问题、解决问题的能力,学会运用编程思维解决实际问题。

3. 培养学生团队协作和沟通表达的能力,能在团队中发挥各自优势,共同完成项目。

情感态度价值观目标:1. 激发学生对编程的兴趣,提高学习积极性,培养自主学习能力。

2. 培养学生勇于尝试、不断探索的精神,增强面对困难的信心。

3. 引导学生关注计算机技术在日常生活中的应用,认识到科技改变生活的力量。

分析课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 知识方面:学生能熟练使用Java语言编写贪吃蛇游戏,掌握相关概念和原理。

2. 技能方面:学生能独立分析游戏需求,设计合适的算法和数据结构,完成游戏功能。

3. 情感态度价值观方面:学生通过团队协作,体验编程带来的成就感,培养积极向上的学习态度。

二、教学内容根据课程目标,教学内容主要包括以下几部分:1. Java基本语法与面向对象编程:- 变量、数据类型、运算符- 控制结构:条件语句、循环语句- 面向对象编程:类、对象、方法、继承、封装、多态2. 游戏设计原理与实现:- 贪吃蛇游戏规则及设计思路- 坐标系的应用- 事件处理机制- 游戏循环结构设计3. 游戏编程实践:- 编程环境配置- 贪吃蛇游戏项目搭建- 游戏功能模块开发:食物、贪吃蛇、碰撞检测等- 游戏优化与调试教学内容安排与进度:1. Java基本语法与面向对象编程(第1-2周)2. 游戏设计原理与实现(第3-4周)3. 游戏编程实践(第5-8周)教材章节关联:1. 《Java编程思想》第1-4章:Java基本语法与面向对象编程2. 《Java游戏编程》第3章:游戏设计原理与实现3. 《Java游戏编程实战》第5-7章:游戏编程实践三、教学方法为了提高教学效果,激发学生的学习兴趣和主动性,本课程采用以下多样化的教学方法:1. 讲授法:教师通过生动的语言、形象的比喻,讲解Java编程基本语法和面向对象编程思想,使抽象的概念具体化,便于学生理解和掌握。

Java程序设计报告《贪吃蛇》

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); }}(四)测试(五)使用说明在游戏过程中,用户通过点击小键盘区的方向键来控制蛇的运行方向;当蛇没有吃到食物且碰到墙壁或自己的身体时游戏结束。

java课程设计贪吃蛇

java课程设计贪吃蛇
-学习构造方法(constructor)的编写,创建蛇和食物对象;
-掌握对象数组的使用,管理蛇的身体部分;
-理解并实现游戏循环(Game Loop)的概念,保持游戏的持续运行和更新;
-引导学生探索游戏中的边界条件处理,如何避免蛇穿越墙壁和自身;
-通过游戏案例,加深对异常处理(try-catch)的认识,保证程序的健壮性。
-最后,通过课堂讨论和展示,让学生分享自己的游戏设计心得和解决问题的策略,促进知识的交流和内化。
-随机数(Random)的使用,生成食物在游戏区域内的随机位置;
-游戏逻辑的实现,包括蛇的长度ຫໍສະໝຸດ 加、得分计算以及游戏结束条件判断。
3、教学内容
-理解面向对象编程思想在游戏开发中的应用,如将蛇、食物和游戏界面抽象为类;
-实现类的封装,为学生介绍私有(private)成员变量和公共(public)方法的使用;
-分析并设计简单的用户交互界面,如开始按钮、暂停按钮和游戏结束提示;
-通过案例,让学生体验程序测试和调试的过程,学习如何寻找和修复程序中的错误;
-鼓励学生进行创新设计,如增加游戏难度、自定义蛇的颜色和速度等,提升编程兴趣和创造力。
5、教学内容
-强调编码规范和注释的重要性,培养学生良好的编程习惯;
-通过贪吃蛇游戏的开发,让学生了解软件开发的迭代过程,包括设计、实现、测试和优化;
-引导学生进行团队合作,分配不同的任务,如界面设计、逻辑开发、测试等,培养团队协作能力;
-介绍如何使用Java文档(Javadoc)为编写的方法和类生成文档,提高代码的可维护性;
-分析游戏中的可扩展性,如何设计代码以便于未来添加新功能,如增加障碍物、敌对生物等;
-讨论游戏的安全性和用户友好性,如何防止非法输入和提供清晰的错误提示;

JAVA课程设计贪吃蛇小程序附代码

JAVA课程设计贪吃蛇小程序附代码

Part Two
JAVA贪吃蛇小程序 代码解析
游戏界面实现
游戏窗口:设置游戏窗口大小和位置
游戏背景:设置游戏背景颜色和图片 游戏元素:设置蛇、食物、障碍物等 元素的位置和样式
游戏控制:设置键盘控制和鼠标控制, 实现游戏的开始、暂停和结束
游戏得分:显示游戏得分和等级,以 及游戏结束提示
游戏音效:设置游戏音效和背景音乐, 增加游戏的趣味性和沉浸感
重新开始:提供重新开始游 戏的选项,重新开始游戏时, 重置游戏界面和蛇的位置
游戏控制实现
键盘控制:通过键盘输入控制蛇的移动方向 游戏循环:通过循环实现游戏的持续运行 蛇的移动:通过改变蛇的位置实现蛇的移动 食物生成:随机生成食物,增加游戏的挑战性 碰撞检测:检测蛇与食物或边界的碰撞,实现游戏的结束或重新开始
Part Four
总结
JAVA贪吃蛇小程序的特点和亮点
添加标题
简单易用:界面简洁,操作简单,适合初学者使用
添加标题
功能丰富:支持多种游戏模式,如经典模式、挑战模式等
添加标题
性能优化:采用高效的算法和优化技术,提高游戏运行速度和稳定性
添加标题
扩展性强:支持自定义皮肤、背景音乐等,满足不同用户的需求
程序实现原理
贪吃蛇游戏是一种经典的游戏,通过控制蛇的移动来获取食物,同时避免撞到墙壁或自己的身 体。
JAVA贪吃蛇小程序的实现原理主要是通过JAVA语言编写程序,实现蛇的移动、食物的生成、 碰撞检测等功能。
蛇的移动是通过改变蛇头的位置来实现的,食物的生成则是随机生成在屏幕上的某个位置。
碰撞检测则是通过判断蛇头是否与墙壁或自己的身体发生碰撞来实现的。
游戏界面: 显示贪吃 蛇和食物
游戏操作: 通过键盘 控制贪吃 蛇移动

java贪吃蛇简介课程设计

java贪吃蛇简介课程设计

java贪吃蛇简介课程设计一、课程目标知识目标:1. 学生理解贪吃蛇游戏的规则和基本原理;2. 学生掌握Java编程语言的基本语法和结构;3. 学生学会使用Java编写简单的图形用户界面程序;4. 学生了解面向对象编程的基本概念及其在贪吃蛇游戏中的应用。

技能目标:1. 学生能够运用Java编程语言实现贪吃蛇游戏的基本功能,如移动、吃食物和增长;2. 学生通过编写代码,培养逻辑思维和问题解决能力;3. 学生掌握运用面向对象编程思想,对贪吃蛇游戏进行模块化设计和实现;4. 学生能够对程序进行调试和优化,提高代码质量。

情感态度价值观目标:1. 学生通过学习Java编程,培养对计算机科学的兴趣和热情;2. 学生在团队协作中,学会沟通和分享,培养合作精神;3. 学生面对编程挑战时,保持积极的学习态度,勇于尝试和创新;4. 学生通过贪吃蛇游戏的开发,认识到编程对于解决现实问题的重要性,提高社会责任感。

课程性质:本课程为信息技术学科,结合Java编程语言和面向对象编程思想,以贪吃蛇游戏为载体,培养学生的编程能力和逻辑思维。

学生特点:学生处于初中年级,具有一定的逻辑思维能力和计算机操作基础,对编程有一定兴趣,但需进一步培养编程技能和问题解决能力。

教学要求:教师应注重理论与实践相结合,引导学生通过编写贪吃蛇游戏,掌握Java编程基本知识和技能,同时关注学生情感态度的培养,提高其合作精神和创新意识。

在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。

二、教学内容1. Java编程基础:- 数据类型与变量- 运算符与表达式- 控制语句(条件语句、循环语句)- 数组的使用2. 面向对象编程基础:- 类与对象- 继承与多态- 抽象类与接口- 异常处理3. 图形用户界面编程:- JFrame窗体- 组件与布局管理器- 事件处理4. 贪吃蛇游戏设计与实现:- 游戏规则与功能分析- 游戏地图、食物、蛇的表示与实现- 蛇的移动、吃食物与增长逻辑- 游戏循环与结束条件教学安排与进度:1. 第一周:Java编程基础学习,完成数据类型、变量、运算符等内容;2. 第二周:学习控制语句、数组等知识,同时引入面向对象编程基础;3. 第三周:学习图形用户界面编程,掌握窗体、组件和事件处理;4. 第四周:分析贪吃蛇游戏需求,设计游戏类和对象,实现基本功能;5. 第五周:完成贪吃蛇游戏的开发,进行调试和优化。

java贪吃蛇游戏课程设计

java贪吃蛇游戏课程设计

java贪吃蛇游戏课程设计一、课程目标知识目标:1. 学生能够理解Java基本语法结构,掌握面向对象编程的基本概念;2. 学生能够掌握Java中数组的使用,理解坐标在二维数组中的应用;3. 学生能够了解游戏循环、键盘事件处理等基本游戏编程概念。

技能目标:1. 学生能够运用所学知识,设计并实现一个简单的贪吃蛇游戏;2. 学生能够通过编写代码,实现蛇的移动、食物的生成和碰撞检测等功能;3. 学生能够掌握基本的编程调试技巧,解决游戏开发过程中遇到的问题。

情感态度价值观目标:1. 学生通过游戏编程,培养对编程的兴趣,提高逻辑思维能力和解决问题的能力;2. 学生在团队协作中,学会沟通与分享,增强团队意识和合作精神;3. 学生能够体验编程带来的成就感,树立自信心,激发进一步学习的动力。

课程性质:本课程为实践性较强的课程,结合Java编程知识,让学生动手实践,培养编程技能。

学生特点:学生已具备一定的Java编程基础,对游戏编程感兴趣,但可能缺乏实际编程经验。

教学要求:教师应引导学生掌握Java编程基础知识,注重实践操作,鼓励学生独立思考和团队协作,培养编程兴趣和解决问题的能力。

通过本课程的学习,使学生能够将所学知识应用于实际项目中,提高综合运用能力。

二、教学内容1. Java基本语法回顾:变量、数据类型、运算符、控制结构(条件语句、循环语句);2. 面向对象编程基础:类与对象、构造方法、成员变量、成员方法;3. 二维数组的使用:声明、初始化、访问;4. 游戏编程基础:游戏循环、键盘事件处理、碰撞检测;5. 贪吃蛇游戏设计:- 游戏窗口创建与设置;- 蛇的表示与移动;- 食物的随机生成;- 碰撞检测与游戏逻辑;6. 编程调试与优化:代码调试技巧、性能优化。

教学内容安排与进度:第一课时:回顾Java基本语法,介绍面向对象编程基础;第二课时:二维数组的使用,游戏编程基础;第三课时:贪吃蛇游戏设计(1)- 游戏窗口创建与设置;第四课时:贪吃蛇游戏设计(2)- 蛇的表示与移动;第五课时:贪吃蛇游戏设计(3)- 食物的随机生成与碰撞检测;第六课时:编程调试与优化,完成贪吃蛇游戏。

java课程设计(贪吃蛇)

java课程设计(贪吃蛇)

java课程设计(贪吃蛇)一、教学目标本节课的教学目标是让学生掌握Java编程语言的基本语法和编程思想,学会使用Java编写简单的程序。

具体包括以下三个方面的目标:1.知识目标:使学生了解Java编程语言的基本语法和结构,包括数据类型、变量、运算符、控制语句等;理解面向对象编程的基本概念,包括类、对象、封装、继承等。

2.技能目标:培养学生使用Java编程语言解决实际问题的能力,学会编写简单的Java程序;培养学生团队合作的能力,学会分工合作完成项目。

3.情感态度价值观目标:培养学生对编程的兴趣和热情,提高学生自主学习的积极性;培养学生勇于尝试、克服困难的精神,增强学生的自信心。

二、教学内容本节课的教学内容主要包括以下几个部分:1.Java编程语言的基本语法和结构,包括数据类型、变量、运算符、控制语句等;2.面向对象编程的基本概念,包括类、对象、封装、继承等;3.Java编程语言的应用,学会编写简单的Java程序;4.团队合作完成项目,培养学生的团队合作能力。

三、教学方法为了达到本节课的教学目标,我们将采用以下几种教学方法:1.讲授法:教师讲解Java编程语言的基本语法和结构,面向对象编程的基本概念;2.案例分析法:分析实际案例,让学生学会使用Java编程语言解决实际问题;3.实验法:学生动手实践,编写简单的Java程序;4.小组讨论法:学生分组讨论,培养团队合作能力。

四、教学资源为了支持本节课的教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:Java编程基础,用于引导学生学习基本语法和结构;2.多媒体资料:PPT、教学视频等,用于辅助讲解和演示;3.实验设备:计算机、网络等,用于学生动手实践;4.编程工具:Eclipse、IntelliJ IDEA等,用于学生编写和调试程序。

五、教学评估为了全面、客观、公正地评估学生的学习成果,我们将采用以下评估方式:1.平时表现:通过观察学生在课堂上的参与程度、提问回答、小组讨论等表现,评估学生的学习态度和积极性;2.作业:布置适量的作业,评估学生对知识的掌握程度和编程能力;3.考试:进行期中和期末考试,评估学生对Java编程语言的基本语法和结构的掌握程度,以及解决实际问题的能力;4.项目完成情况:评估学生在团队合作完成项目的过程中的表现,包括分工合作、沟通协作、解决问题等能力。

Java期中课程设计报告-贪食蛇

Java期中课程设计报告-贪食蛇

Java期中课程设计报告题目:贪食蛇游戏程序姓名:学号:院系:专业:年级:贪吃蛇游戏程序设计一、基本内容描述运用java技术开发出贪吃蛇游戏,这个程序是用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块。

移动时必须从蛇头开始,也就是蛇尾不能改作蛇头。

当游戏者按了方向键后,蛇头朝着指定的方向移动,一步移动一节身体。

图形的实现是从蛇头的新位置开始画出蛇。

用户可以用上下左右键控制蛇头的方向,用空格键暂停或继续,非常简单!可以实现如下功能:1.贪吃蛇游戏是大家很常见的小游戏,在生活工作之余大家可以玩它,已达到放松各种压力的目的。

2.游戏可以进行升级,也就是增加吃食物的难度,以便使大家更有挑战性,不觉得太无趣。

3.游戏界面大小可以任意指定,数据从文件读入。

4.利用swing实现良好的GUI界面。

二、需求分析(一)系统功能要求:1.利用方向键来改变蛇的运行方向。

2.空格键暂停或继续游戏,并在随机的地方产生食物。

3.吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。

(二)系统设计思路:1.贪吃蛇是很经典的格子游戏。

所谓格子游戏就是在设计游戏时的主要思想是每个设对象都是由格子组成,游戏运行界面也是由格子组成。

格子思想决定了此类游戏在设计时的算法思想。

2.方向键控制一个方块的移动的方法,一个方块的移动是靠移动其坐标位置来实现的。

3.方向键控制是上下左右对一个方块的控制,用四个判断语句实现。

4.蛇的移动算法思想可以看成是第一个方块移动,第二个方块移到第一个方块的位置, 第三个方块移动到第二个方块的位置⋯⋯第N个方块移动到第N-1个方块的位置。

这样连续的移动就是蛇的移动了。

方向控制键控制了第一个方块的移动后,后面方块跟着移动 ,这样也实现了方向键控制对长蛇的移动。

5.食物的随机产生的方法食物的随机产生需要一个随机种子函数然后利用系统时间做为随机种子。

6.蛇的身体变长的方法当然要当蛇吃到食物时才能使身体变长。

java课程设计贪吃蛇

java课程设计贪吃蛇

java课程设计贪吃蛇一、教学目标本章节的教学目标旨在让学生掌握Java编程语言的基本知识,学会使用Java 编写简单的程序,并通过编写贪吃蛇游戏,提高学生的编程能力和逻辑思维能力。

1.了解Java编程语言的基本语法和结构。

2.掌握面向对象编程的基本概念和方法。

3.了解Java集合框架和常用数据结构。

4.能够使用Java编写简单的控制台程序。

5.能够使用Java编写图形用户界面程序。

6.能够运用面向对象编程思想独立完成一个小游戏。

情感态度价值观目标:1.培养学生对编程的兴趣和热情,提高学生的自主学习能力。

2.培养学生团队协作精神和良好的编程习惯。

3.培养学生解决实际问题的能力,提高学生的创新意识。

二、教学内容本章节的教学内容主要包括Java编程语言的基本语法、面向对象编程、集合框架和常用数据结构,以及Java图形用户界面编程。

通过编写贪吃蛇游戏,让学生将这些知识点运用到实际编程中。

1.Java编程语言基本语法:数据类型、变量、运算符、控制结构等。

2.面向对象编程:类、对象、封装、继承、多态等。

3.Java集合框架:List、Set、Map等集合类及其应用。

4.常用数据结构:数组、链表、栈、队列等。

5.Java图形用户界面编程:Swing组件、事件处理等。

三、教学方法本章节采用讲授法、案例分析法和实验法相结合的教学方法,以激发学生的学习兴趣和主动性。

1.讲授法:用于讲解Java编程语言的基本语法、面向对象编程、集合框架和常用数据结构等知识点。

2.案例分析法:通过分析实际编程案例,让学生理解并掌握编程方法。

3.实验法:让学生动手编写程序,培养学生的实际编程能力。

四、教学资源本章节的教学资源包括教材、参考书、多媒体资料和实验设备。

1.教材:选用《Java编程思想》作为主要教材,辅助以《Java核心技术》等参考书。

2.多媒体资料:提供Java编程语言的基本语法、面向对象编程、集合框架和常用数据结构的PPT课件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面向对象课程设计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");try {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);try {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.开发平台Java:1.6.0_07; Java HotSpot(TM) Client VM 10.0-b234.测试与发布4.1运行测试过程4.1.1开始新游戏4.1.2游戏运行4.1.3 游戏结束4.1.4变化游戏难度4.1.5游戏排行榜4.1.6游戏存取档4.2测试结果游戏运行状况良好,未发现bug。

相关文档
最新文档