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

时间:2024.3.27

前言

Java最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景。于是改造了Oak,以“Java”的名称正式发布。

  Java 编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它继承了 C++ 语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。

  Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。但在 J2SE 1.4.2 发布后,Java 的执行速度有了大幅提升。

  与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java 软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。

  Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

正文

1.1课程设计目的

《JAVA程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。

2.1工程概况

2.1.1案例提出及工程用时

经过两天在图书馆以及网络上查阅的资料,然后提出这次课程设计的目标《贪吃蛇游戏》的设计。然后接下来就是查阅更多的资料,制定接下来的详细计划,最终计划用两周的时间完成此次课程设计提出的案例。

2.1.2开发环境

硬件环境:

CPU:Intel Pentium(R)4

主频:2.40GHz

内存:256MB

软件环境:

操作系统:Windows XP

编程环境: JDK 1.6

开发工具:Eclipse jdk

3.1设计方案论证

3.1.1设计思路

贪吃蛇游戏设计与实现,主要分为以下二个模块:游戏主界面模块和游戏控制模块。在此只实现游戏的游戏主界面模块、游戏控制模块。并且只是实现移动速度、暂停、重新开始等功能。

游戏主界面模块:

游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、新生方块的预览、暂停游戏按钮、重新开始游戏按钮。从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。

游戏控制模块:

这个模块是游戏的中心环节,主要完成控制游戏的开始、暂停、重新开始等功能。为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。

本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的速度控制、游戏的暂停、游戏的退出等功能,分为: 游戏主界面模块、游戏控制模块以二个模块。

3.1.2程序概述

本程序是一个利用Java应用软件制作的贪食蛇小游戏。在游戏过程中,用户通过点击小键盘区的方向键来控制蛇的运行方向;游戏运行过程中,如果想暂停,只需要按F3键即可。重新开始游戏的按键为F2。当蛇没有吃到食物且碰到墙壁或自己的身体时游戏结束。

本程序的另一个功能是在程序运行窗口的左上角显示,用户在游戏过程中的移动和长度。

3.1.3程序流程图

本次游戏设计的处理流程如图1所示。

3.1.4 总设计模块的划分

根据游戏需求中游戏所要实现的功能,整个游戏分为二个模块进行具体的设计,如图2所示。

   游戏控制模块的主要框架如图3所示。

游戏暂停控制:点击“F3”按钮,游戏暂停;再单击,游戏继续。

游戏重新开始控制:点击“F2”键后,点击确定,即游戏重新开始。

游戏退出控制:点击“F4”键好,点击确定,退出游戏界面。

3.1.5类、方法、属性说明

(1)成员变量

表1 主要成员变量(属性)

(2)方法

表2 主要方法

4.1设计结果与分析

本程序在运行后,能够正常的相应按键事件。由于程序的主要部分已经集成为一个对象SnakeModel,所以利用键盘就可以实现操作。蛇前行的过程中,可以任意向其左或右方向改变方向。点击F3键后游戏就暂停了。点击F2键游戏重新开始。点击F4游戏退出。运行结果如下图4所示:

   图4 程序运行图 

当蛇没有吃到食物且碰到边界或碰撞到自己的身体时,游戏结束。如果想重新开始即点击“确定”后按F2键,运行结果如下图5所示:

 

5 重新开始图

4.1.1程序异常处理

在蛇的运行线程过程中,当蛇撞到墙或自己的身体时,将抛出一个Exception类的异常对象,然后使用try-catch去捕捉这个异常,

异常的处理如下:

try{
Thread.sleep(timeInterval); }
catch(Exception e)
{
break;

}

心得体会

通过这次课程设计,我对这学期所学的JAVA语言程序设计有一个更深刻的了解,将所学的知识应用于实践,由于所学知识有限,为了使游戏能够实现自己预先的构想,我通过上网和去图书馆找程序,比较好的流程图及功能模块,不断阅读修改代码使程序达到预期所要实现的目标,完成课程设计后,可以感觉到自己对Java程序的又有了新的认识。总之,通过本次的课程设计,使我平时学到的理论知识得到了很好地升华,理论与实际得到一次很好的结合,为我今后参加工作打下了坚实的基础,使我受益匪浅。

参考文献

[1]赵文靖编著.Java程序设计基础与上机指导.北京:清华大学出版社,2006

[2]赵毅主编.跨平台程序设计语言——Java.西安:西安电子科技大学出版社,

[3]王路群.Java高级程序设计.北京:中国水利水电出版社,2006

[4]雍俊海编著.Java程序设计习题集.北京:清华大学出版社,2006

[5]朱福喜编著.Java语言习题与解析.北京:清华大学出版社,2006

[6]吴其庆编著.Java程序设计实例教程.北京:冶金工业出版社,2006

程序代码:


import java.awt.*;

import javax.swing.*;

import java.util.*;

import java.awt.event.*;

publicclass She extends JFrame implements ActionListener, WindowListener {

 JLabel bt1;

 JLabel bt2;

 MyPaint mp;

 JMenuItem kaishi;

 JMenuItem zanting;

 JMenuItem tuichu;

 JRadioButton chu;

 JRadioButton zhong;

 JRadioButton gao;

 JRadioButton chao;

 JMenuItem guanyu;

 Font f;

 public She() {

  f = new Font("宋体", Font.PLAIN, 12);

  mp = new MyPaint();

  mp.setShe(this);

  JMenuBar caidan = new JMenuBar();

  JMenu shezhi = new JMenu("设置");

  shezhi.setFont(f);

  JMenu nandu = new JMenu("难度");

  nandu.setFont(f);

  JMenu bangzhu = new JMenu("帮助");

  bangzhu.setFont(f);

  caidan.add(shezhi);

  caidan.add(nandu);

  caidan.add(bangzhu);

  kaishi = new JMenuItem("开始游戏 F2");

  kaishi.setFont(f);

  kaishi.addActionListener(this);

  zanting = new JMenuItem("暂停/继续 F3");

  zanting.setFont(f);

  zanting.addActionListener(this);

  tuichu = new JMenuItem("退出 F4");

  tuichu.setFont(f);

  tuichu.addActionListener(this);

  chu = new JRadioButton("初级,最快速度195", true);

  chu.setFont(f);

  chu.addActionListener(this);

  zhong = new JRadioButton("中级,最快速度225");

  zhong.setFont(f);

  zhong.addActionListener(this);

  gao = new JRadioButton("高级,最快速度255");

  gao.setFont(f);

  gao.addActionListener(this);

  chao = new JRadioButton("超级,最快速度275");

  chao.setFont(f);

  chao.addActionListener(this);

  ButtonGroup bg = new ButtonGroup();

  bg.add(chu);

  bg.add(zhong);

  bg.add(gao);

  bg.add(chao);

  nandu.add(chu);

  nandu.add(zhong);

  nandu.add(gao);

  nandu.add(chao);

  guanyu = new JMenuItem("关于");

  guanyu.setFont(f);

  guanyu.addActionListener(this);

  shezhi.add(kaishi);

  shezhi.add(zanting);

  shezhi.add(tuichu);

  bangzhu.add(guanyu);

  bt1 = new JLabel(" 长度:0");

  bt1.setFont(f);

  bt2 = new JLabel("移动:5");

  bt2.setFont(f);

  JPanel p = new JPanel();

  p.setLayout(new GridLayout(1, 2));

  p.add(bt1);

  p.add(bt2);

  this.addWindowListener(this);//添加窗体监听器

  this.setJMenuBar(caidan);

  this.add(p, BorderLayout.NORTH);

  this.add(mp);

  this.add(new JLabel(" "),  BorderLayout.WEST);

  this.setSize(335, 385);

  this.setResizable(false);

  this.setLocation(300, 150);

  this.setTitle("MyPaint");

  this.setVisible(true);

 }

 publicvoid setDS(int a, int b) {

  bt1.setText(" 长度:" + a);

  bt2.setText("移动:" + b);

 }

 publicvoid setChu() {

  chu.setSelected(true);

  mp.setSD(300, 110);

  this.setDS(0, 305 - 300);

  chu.setEnabled(true);

  zhong.setEnabled(true);

  gao.setEnabled(true);

  chao.setEnabled(true);

 }

 publicvoid setNanDu() {

  chu.setEnabled(false);

  zhong.setEnabled(false);

  gao.setEnabled(false);

  chao.setEnabled(false);

 }

 publicvoid actionPerformed(ActionEvent e) {

  if (e.getSource() == zanting) {

   mp.setZanTing();

  }

  elseif (e.getSource() == kaishi) {

   mp.setKaiShi();

  }

  elseif (e.getSource() == tuichu) {

   mp.setTuiChu();

  }

  elseif (e.getSource() == guanyu) {

   JLabel gy = new JLabel("小游戏 贪吃蛇 V1.0");

   gy.setFont(f);

   JOptionPane.showMessageDialog(this, gy);

  }

  elseif (e.getSource() == chu) {

   mp.setSD(300, 110);

   this.setDS(0, 305 - 300);

  }

  elseif (e.getSource() == zhong) {

   mp.setSD(250, 80);

   this.setDS(0, 305 - 250);

  }

  elseif (e.getSource() == gao) {

   mp.setSD(200, 50);

   this.setDS(0, 305 - 200);

  }

  elseif (e.getSource() == chao) {

   mp.setSD(150, 30);

   this.setDS(0, 305 - 150);

  }

 }

 publicstaticvoid main(String[] args) {

  new She();

 }

 /**

  * Method windowOpened

  *

  *

  * @param e

  *

  */

 publicvoid windowOpened(WindowEvent e) {

  // TODO: Add your code here

 }

 publicvoid windowClosing(WindowEvent e) {

  System.exit(0);

 }

 publicvoid windowClosed(WindowEvent e) {

  // TODO: Add your code here

 }

 publicvoid windowIconified(WindowEvent e) {

  // TODO: Add your code here

 }

 publicvoid windowDeiconified(WindowEvent e) {

  // TODO: Add your code here

 }

 publicvoid windowActivated(WindowEvent e) {

  // TODO: Add your code here

 }

 publicvoid windowDeactivated(WindowEvent e) {

  // TODO: Add your code here

 }

}

class MyPaint extends JPanel implements Runnable, KeyListener, FocusListener {

 She s;

 Font f = new Font("宋体", Font.PLAIN, 12);

 int x = 150;

 int y = 0;

 Random r = new Random();

 int sjx = r.nextInt(300)/10*10;

 int sjy = r.nextInt(300)/10*10;

 int fx = 2;

 int sw = 0;

 int sd = 300;

 int cs = 0;

 int d = 150;

 String[] zx = new String[1000];

 boolean zanting = false;

 boolean zanting1 = false;

 boolean siwang = false;

 boolean shenti = false;

 public MyPaint() {

  Thread t = new Thread(this);

  t.start();

  this.addKeyListener(this);

  this.setFocusable(true);

  this.addFocusListener(this);

 }

 publicvoid setShe(She ss) {

  s = ss;

 }

 publicvoid setZanTing() {

  if (zanting) {

   zanting = false;

  }

  else {

   zanting = true;

  }

 }

 publicvoid setKaiShi() {

  JLabel ks = new JLabel("是否重新开始?");

  ks.setFont(f);

  int a = JOptionPane.showConfirmDialog(s, ks);

  if (a == 0) {

   x = 150;

   y = 0;

   sjx = r.nextInt(300)/10*10;

   sjy = r.nextInt(300)/10*10;

   fx = 2;

   sw = 0;

   sd = 300;

   cs = 0;

   zanting = false;

   siwang = false;

   shenti = false;

   s.setChu();

   s.setDS(sw, 305 - sd);

  }

 }

 publicvoid setTuiChu() {

  JLabel tc = new JLabel("确定退出吗?");

  tc.setFont(f);

  int a = JOptionPane.showConfirmDialog(s, tc);

  if (a == 0) {

   s.dispose();

   System.exit(0);

  }

 }

 publicvoid setSD(int a, int b) {

  sd = a;

  d = b;

 }

 publicvoid paint(Graphics g) {

  zx[cs] = x + "/" + y;

  super.paint(g);

  g.setColor(Color.BLACK);

  g.drawRect(0, 0, 300, 300);

  g.setColor(Color.BLACK);

  g.fillRect(sjx, sjy, 10, 10);

  g.setColor(Color.BLUE);

  g.fillRect(x, y, 10, 10);

  g.setColor(Color.RED);

  for (int i = 1; i <= sw; i++) {

   int j = cs - i;

   if (j < 0) {

    j = cs-i+999+1;

   }

   String[] s = zx[j].split("/");

   if (x == Integer.parseInt(s[0]) && y == Integer.parseInt(s[1])) {//蛇撞到自己身上了

    siwang = true;

    shenti = true;

   }

   if (sjx == Integer.parseInt(s[0]) && sjy == Integer.parseInt(s[1])) {//食物在蛇身体上

    g.setColor(Color.BLACK);

    g.fillRect(sjx, sjy, 10, 10);

    g.setColor(Color.RED);

    continue;

   }

   g.fillRect(Integer.parseInt(s[0]), Integer.parseInt(s[1]), 10, 10);

  }

 }

 publicvoid run() {

  while (true) {

   cs++;

   if (cs == 1000) {

    cs = 0;

   }

   switch (fx) {

    case 1:

     y-=10;//上

     break;

    case 2:

     y+=10;//下

     break;

    case 3:

     x-=10;//左

     break;

    case 4:

     x+=10;//右

     break;

   }

   this.repaint();

   if (x == sjx && y == sjy) {

    sjx = r.nextInt(300)/10*10;

    sjy = r.nextInt(300)/10*10;

    sw++;

    if (sw == 1) {

     s.setNanDu();

    }

    if (sd <= d) {

     sd = d;

    }

    else {

     sd-=5;

    }

    s.setDS(sw, 305 - sd);

   }

   if (x < 0 || x > 290 || y < 0 || y > 290 || shenti) {

    JOptionPane.showMessageDialog(s, "游戏结束!");

    siwang = true;

    shenti = false;

   }

   while (zanting || zanting1) {

    try {

    Thread.sleep(100);

    }

    catch (Exception e) {

    }

   }

   while (siwang) {

    try {

     Thread.sleep(100);

    }

    catch (Exception e) {

    }

   }

   try {

    Thread.sleep(sd);

   }

   catch (Exception e) {

   }

  }

 }

 publicvoid keyPressed(KeyEvent e) {

  switch (e.getKeyCode()) {

   case 38:

    fx = 1;//上

    break;

   case 40:

    fx = 2;//下

    break;

   case 37:

    fx = 3;//左

    break;

   case 39:

    fx = 4;//右

    break;

   case KeyEvent.VK_F3:

    this.setZanTing();

    break;

   case KeyEvent.VK_F2:

    this.setKaiShi();

    break;

   case KeyEvent.VK_F4:

    this.setTuiChu();

    break;

  }

 }

 publicvoid keyReleased(KeyEvent e) {

 }

 publicvoid keyTyped(KeyEvent e) {

 }

 publicvoid focusGained(FocusEvent e) {

  zanting1 = false;

 }

 publicvoid focusLost(FocusEvent e) {

  zanting1 = true;

 }


}

更多相关推荐:
JAVA贪吃蛇课程设计报告

Java应用开发课程设计报告题目指导老师姓名专业班级日期JAVA小游戏贪吃蛇目录一系统总体设计1一设计目标及完成功能1二系统结构设计1二详细设计2一界面设计2二系统设计4三关键技术及算法6四测试7五安装使用说明...

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

前言Java最初被命名为Oak目标设定在家用电器等小型系统的编程语言来解决诸如电视机电话闹钟烤面包机等家用电器的控制和通讯问题由于这些智能化家电的市场需求没有预期的高Sun放弃了该项计划就在Oak几近失败之时随...

贪吃蛇游戏java课程设计

宝鸡文理学院计算机科学系JAVA程序设计课程设计报告题目姓名学号专业班级指导教师日期贪吃蛇游戏赵鹏飞陈瑞李烨20xx9606407320xx9606407720xx9606407220xx96064016软...

贪吃蛇Java课程设计

华东交通大学理工学院课程设计报告书所属课程名称Java游戏课程设计题目贪吃蛇游戏Java课程设计分院专业班级学号学生姓名指导教师20年月日华东交通大学理工学院课程设计论文任务书专业班级姓名一课程设计论文题目贪吃...

贪吃蛇Java课程设计

目录1设计任务与要求111设计任务112具体要求12软件主要模块流程图23总体方案与说明331总体方案332系统模块3321游戏界面设计3322贪吃蛇蛇身及运动设置5323游戏控制设置34程序设计441Game...

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

Java程序设计课程设计报告题目贪吃蛇游戏的设计与实现指导老师沈泽刚专业计算机科学与技术班级103姓名梁潇一课程设计目的贪吃蛇游戏一款非常经典的手机游戏因为它比较简单有趣无论老少都比较适合目的是更好地了解和掌握...

java课程设计贪吃蛇小程序 附代码(2)

枣庄学院信息科学与工程学院课程设计任务书题目贪吃蛇小程序的设计与开发学号姓名专业课程java程序设计指导教师刘职称讲师完成时间20xx年5月20xx年6月枣庄学院信息科学与工程学院制课程设计任务书及成绩评定12...

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

华东交通大学理工学院课程设计报告书所属课程名称JAVA课程设计题目贪吃蛇游戏设计分院专业班级学号指导教师华东交通大学理工学院课程设计论文任务书专业班级姓名一课程设计论文题目贪吃蛇游戏设计二课程设计论文工作自20...

《Java 》课程设计报告模板

南京晓庄学院JAVA程序设计课程设计报告题目姓名学号班级指导教师完成时间贪吃蛇游戏系统的设计与实现刘婷婷1213074012软转1班王铮20xx年6月25号成绩信息工程学院20xx年6月1目录1引言111系统开...

贪吃蛇课程设计报告

基于VCNET的贪吃蛇游戏的目录1实验目的2实验任务与要求21实验内容22实验要求23实验环境3设计方案31程序功能32设计思想33设计总体流程图34设计的具体实现4程序测试41测试内容与结果42程序运行效果图...

java贪吃蛇设计文档

姓名XXXXXX学号XXXXXX贪吃蛇设计文档目录1引言411编写目的412项目背景413开发工具和语言414术语说明4141数据结构4142类52概要设计521目标522运行环境523总体设计5231游戏设计...

java贪吃蛇课程设计

沈阳理工大学课程设计专用纸1设计目的11背景近年来Java作为一种新的编程语言以其简单性可移植性和平台无关性等优点得到了广泛地应用特别是Java与万维网的完美结合使其成为网络编程和嵌入式编程领域的首选编程语言J...

贪吃蛇java课程设计报告(17篇)