JAVA课程设计之赛马游戏
JAVA 小程序 赛马
1、Horsepublic class Horse extends JLabel implements Runnable {public Thread horseThread; public String horseName;public int horseMoveFrom;//起点public int horseMoveTo;//终点public int horseY;//垂直位置public Dimension horseSize;//马的大小public Horse(String horseName ,Dimension horseSize ,int horseMoveFrom ,int horseMoveTo ,int horseY) {this.horseName = horseName; this.horseSize = horseSize;this.horseMoveFrom = horseMoveFrom; this.horseMoveTo = horseMoveTo;this.horseY = horseY; this.setText(horseName);this.setHorizontalTextPosition(CENTER);this.setVerticalTextPosition(TOP);this.setSize(horseSize);this.setIcon(new ImageIcon(getClass().getResource("imgs/RaceHorse/horse.gif")));this.horseGoto(this.horseMoveFrom, this.horseY);}public void createThread() {this.horseThread = new Thread(this); this.horseThread.start();}public void horseGoto(int x, int y) { this.setLocation(x, y); }public void run() {int xPosition = horseMoveFrom; //this.horseThread.suspend();synchronized (this) {try {wait();} catch (InterruptedException e) { e.printStackTrace(); }}while(true) {xPosition += 2;try{long randomMoveTime = (long)(Math.random()*40);this.horseThread.sleep(randomMoveTime);this.horseGoto(xPosition, horseY);}catch(Exception ex) { System.out.println("Error!"); }if(xPosition>=horseMoveTo) {xPosition = horseMoveFrom;this.horseGoto(xPosition, horseY);synchronized (this) {try {this.wait();} catch (InterruptedException e) { e.printStackTrace(); }}}else if(xPosition>=(horseMoveTo-this.horseSize.width)&&xPosition<(horseMoveTo-this.horseSize.width)+2){//报告到达终点 //endSet(this);}}}public synchronized void sleepUp(){ this.notify(); }}2、RaceHorsepublic class RaceHorse extends JFrame implements ActionListener{private JPanel contentPane; //界面变量JPanel horsesP, command;//定义两个面板,马所在的和命令面板JPanel endLine;//全局变量Horse horse[] = new Horse[4];Horse winner[] = new Horse[4];int nowWinNum = 0;//本次已到终点的马数int heaveRaceedNum = 0;//已赛马的次数boolean startFlag = false;//运行中的标志为true时表示已开始int horseRestorationNum = 4;//马匹复位的个数public RaceHorse() {setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 518, 416);contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));setContentPane(contentPane);contentPane.setLayout(null);JButton btnNewButton = new JButton("\u5F00\u59CB\u8D5B\u9A6C");btnNewButton.setBounds(224, 354, 95, 25);contentPane.add(btnNewButton);init();btnNewButton.addActionListener(this);}public void init(){final int endInt = 600;horsesP = new JPanel(null); horsesP.setBounds(10, 10, 700, 350); //马匹面板horsesP.setMaximumSize(new Dimension(10,10));horsesP.setBackground(Color.white); endLine = new JPanel();endLine.setBounds(endInt,0,2, 280); endLine.setBackground(Color.red);horsesP.add(endLine);for(int i=0;i<4;i++) {//初始化马匹horse[i] = new Horse((i+1)+"号马",new Dimension(116,80),30,endInt,80*i);horsesP.add(horse[i]);horse[i].createThread();}getContentPane().add(horsesP);}public static void main(String[] args) {RaceHorse frame = new RaceHorse();}public void actionPerformed(ActionEvent e) {for(int i=0; i<4; i++) {//horse[i].horseThread.resume();//horse[i].notifyAll();horse[i].sleepUp();}}}。
田忌赛马Java解答
⽥忌赛马Java解答你⼀定听过⽥忌赛马的故事吧?如果3匹马变成1000匹,齐王仍然让他的马按从优到劣的顺序出赛,⽥忌可以按任意顺序选择他的赛马出赛。
赢⼀局,⽥忌可以得到200两银⼦,输⼀局,⽥忌就要输掉200两银⼦,平局的话不输不赢。
请问⽥忌最多能赢多少银⼦?关于输⼊:输⼊包含多组测试数据,每组测试数据的第⼀⾏是⼀个整数n(1<=n<=1000),表⽰⽥忌和齐王都拥有n匹马。
接下来⼀⾏是n个整数,表⽰⽥忌的马的速度,下⼀⾏也是n个整数,表⽰齐王的马的速度。
输⼊的最后以⼀个0表⽰结束。
关于输出:对每组数据,输出⼀个整数,表⽰⽥忌⾄多可以赢多少银⼦,如果⽥忌赢不了,就输出⼀个负数,表⽰⽥忌最少要输多少银⼦。
例⼦输⼊:392 83 7195 87 74220 2020 20220 1922 18例⼦输出:200package tianjisaima;import java.util.Scanner;import java.util.List;import java.util.ArrayList;import java.util.Collections;public class Main{public static void main(String args[]){int n, m;List<Integer> list1=new ArrayList<Integer>();List<Integer> list2=new ArrayList<Integer>();Scanner in=new Scanner(System.in);while(true){n=in.nextInt();if(n==0) break;//输⼊数据for(int i = 0; i < n; ++i){list1.add(in.nextInt());}for(int i = 0; i < n; ++i){list2.add(in.nextInt());}//处理数据Collections.sort(list1);Collections.sort(list2);int i=0, j=0, x=n-1, y=n-1,count=0;boolean bLast=true;while(bLast){//是否是最后⼀匹马if(x==i)bLast=false;if(list1.get(x) > list2.get(y)){//如果⽥忌当前最好的马可以胜齐王最好的马,那么⽐⼀场 x--;y--;count+=200;}else if(list1.get(i)> list2.get(j)){//如果⽥忌当前最差的马可以胜齐王最差的马,那么⽐⼀场 i++;j++;count += 200;}else{//否则,让⽥忌最差的马和齐王最好的好⽐⼀场if(list1.get(i) < list2.get(y))count -= 200;i++;y--;}}System.out.println(count);list1.clear();list2.clear();}}}。
海大Java课程设计
Java课程设计报告一、题目要求模拟马赛跑要求:用图形用户界面实现。
能设置比赛时间,马匹的数量(至少3只以上)等等。
在任意时间段内马匹的速度是随机的。
开始比赛之后以动画显示赛马过程。
提示:使用多线程二、题目分析要显示赛马的动画效果,必须要要使用Java的GUI编程实现。
并且不断调用类JPanel中的repaint()方法刷新画面,实现动画帧的连续播放。
马匹速度是随机的,可以联想到调用类Rndom中的相关方法;最后的比赛时间的获取,可以用马匹到达终点的时间减去马匹开始比赛的时间,再用日期时间类Date和日期格式化操作类进行相应的转化。
三、源代码主界面:package java课程设计之模拟马赛跑;import javax.swing.*;//import sun.java2d.pipe.DrawImage;import java.awt.*;import java.awt.event.*;import java.util.Vector;public class MyHorseRacing extends JFrame{/****/private static final long serialVersionUID = 3870426623557696342L;private MyPanel mp = null;/*private*/static JButton staBut = null;/*private*/static JButton reStaBut = null;private JPanel jP1 = null;private JPanel jP2 = null;private JPanel jP3 = null;private JLabel jL1 = null;private JLabel jL2 = null;// private JLabel jL3 = null;// private JLabel jL4 = null;// private JComboBox<String> jC1;//// MyComboBox myComb = new MyComboBox();static int horsNum = 0;public static void main(String[] args) {/*try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.Win dowsLookAndFeel");} catch (ClassNotFoundException e) {// TODO 自动生成的catch 块e.printStackTrace();} catch (InstantiationException e) {// TODO 自动生成的catch 块e.printStackTrace();} catch (IllegalAccessException e) {// TODO 自动生成的catch 块e.printStackTrace();} catch (UnsupportedLookAndFeelException e) {// TODO 自动生成的catch 块e.printStackTrace();}*/JFrame.setDefaultLookAndFeelDecorated(true);try {javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifL ookAndFeel");} catch (ClassNotFoundException e) {// TODO 自动生成的catch 块e.printStackTrace();} catch (InstantiationException e) {// TODO 自动生成的catch 块e.printStackTrace();} catch (IllegalAccessException e) {// TODO 自动生成的catch 块e.printStackTrace();} catch (UnsupportedLookAndFeelException e) {// TODO 自动生成的catch 块e.printStackTrace();}Icon icon=new ImageIcon("images/facebook.gif");Object[] possibilities = {"3", "4", "5" };String initNum = (String)JOptionPane.showInputDialog(null, "请先设置马匹数", "提示",RMATION_MESSAGE, icon, possibilities, possibilities[0]);System.out.println(initNum);MyHorseRacing.horsNum = Integer.parseInt(initNum);@SuppressWarnings("unused")MyHorseRacing myGame = new MyHorseRacing();}public MyHorseRacing(){// horsNum = Integer.parseInt(MyComboBox.getNum());//mp = new MyPanel(horsNum);jP1 = new JPanel(new GridLayout(1,3));jP2 = new JPanel(new FlowLayout(FlowLayout.CENTER,10,10));jP3 = new JPanel(new FlowLayout(FlowLayout.CENTER,10,10));jL1 = new JLabel(new ImageIcon("images/GuanZhongXi.jpg"));jL2 = new JLabel("");// jL3 = new JLabel("设置比赛时间\t");// jL4 = new JLabel("设置比赛马匹数\t");staBut = new JButton("\t开\t始\t");reStaBut = new JButton("\t重新开始\t");// jC1 = new JComboBox<String>(myComb);// jC1.setSelectedIndex(0); //默认显示第一个//设置布局管理器setLayout(new BorderLayout());jP1.setLayout(new GridLayout(3,1,5,1));//添加组件this.add(mp,BorderLayout.CENTER);mp.setBackground(Color.WHITE);// jP2.add(jL3);jP2.add(staBut);// jP2.add(jL4);// jP2.add(jC1);jP2.add(reStaBut);jP1.add(jP2);jP1.add(jP3);jP1.add(jL2);this.add(jP1,BorderLayout.SOUTH);jP1.setBackground(Color.YELLOW);this.add(jL1,BorderLayout.NORTH);//注册监听staBut.addActionListener(mp);reStaBut.addActionListener(mp);// setBut.addActionListener((ActionListener) myComb); // jC1.addActionListener((ActionListener) myComb);//设置窗体属性this.setTitle("赛马游戏");this.setSize(1300, 700);// this.pack();this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}}class MyPanel extends JPanel implements ActionListener{/****/private static final long serialVersionUID = -7869482491734922949L;// private boolean state = true;Vector<Horse> hors = new Vector<Horse>();// public boolean getState() {// return state;// }// public void setState(boolean state) {// this.state = state;// }public MyPanel(int horsNum){for (int i = 0; i < horsNum; i++) {Horse horse = new Horse(0,10+(i*70));hors.add(horse);System.out.println(" 构造方法X = "+horse.getX()+"构造方法Y = "+horse.getY());}// System.out.println(hors.size());// horse1 = new Horse(0,10);// horse2 = new Horse(0,80);// horse3 = new Horse(0,150);// System.out.println(MyComboBox.getNum());}@Overridepublic void paint(Graphics g) {super.paint(g);//初始化场景图g.setColor(Color.RED);g.drawLine(0, 0, 1300, 0);g.drawLine(0, 70, 1300, 70);g.drawLine(0, 140, 1300, 140);g.drawLine(0, 210, 1300, 210);g.drawLine(0, 280, 1300, 280);g.drawLine(0, 350, 1300, 350);g.drawLine(116, 0, 116, 350);g.drawLine(1200, 0, 1200, 350);g.setColor(Color.BLACK);g.setFont(new Font("华文新魏",Font.BOLD,50));g.drawString("1",120,50);g.drawString("2",120,120);g.drawString("3",120,190);g.drawString("4",120,260);g.drawString("5",120,330);g.setColor(Color.red);g.setFont(new Font("华文新魏",Font.BOLD,20));g.drawString("起点", 116, 370);g.drawString("终点", 1200, 370);// drawHorse(horse1.getX(),horse1.getY(),g);// drawHorse(horse2.getX(),horse2.getY(),g);// drawHorse(horse3.getX(),horse3.getY(),g);for (int i = 0; i < hors.size(); i++) {drawHorse(hors.get(i).getX(),hors.get(i).getY(),g);// System.out.println(" i\t"+i);}// if(this.getState() == true){// System.out.println(" this.getState() +"+this.getState());// this.outPut();// }// if(Horse.rank == hors.size() && this.getState()){// JOptionPane.showMessageDialog(null, Horse.sbf, "比赛成绩", RMATION_MESSAGE);// this.setState(false);// }}// public void outPut(){// if(Horse.rank == hors.size()){//// JOptionPane.showMessageDialog(null, Horse.sbf, "比赛成绩", RMATION_MESSAGE);// System.out.println("能进来吗?");// this.setState(false);// System.out.println("why not? "+this.getState());// }// }public void drawHorse(int x,int y,Graphics g){Image img = Toolkit.getDefaultToolkit().getImage("images/horse.gif");g.drawImage(img,x,y,this);// System.out.println(" 画马\t"+1);this.repaint();}public void actionPerformed(ActionEvent e) {// TODO 自动生成的方法存根//开始按钮对应的事件处理// new Thread(horse1,"赤兔马").start();// new Thread(horse2,"汗血宝马").start();// new Thread(horse3,"白龙马").start();if(e.getSource() == MyHorseRacing.staBut){for (int i = 0; i < hors.size(); i++) {new Thread(hors.get(i),"赤兔马"+(i+1)).start();}MyHorseRacing.staBut .setVisible(false);}if(e.getSource() == MyHorseRacing.reStaBut){System.out.println("wahhaa");for (int i = 0; i < hors.size(); i++) {hors.get(i).setX(0);hors.get(i).setIsLive(true);Horse.sbf.replace(0, Horse.sbf.length() - 1, "");Horse.rank = 0;// new Thread(hors.get(i),"赤兔马").start();}}this.repaint();}}马匹Horse类:package java课程设计之模拟马赛跑;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Random;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JOptionPane;public class Horse implements Runnable{/*** @param args*/private int x;private int y;private int speed = 0;private boolean isLive = true; //是否存活的标志private long start;private long end;static int rank = 0;static StringBuffer sbf = new StringBuffer(); //打印最后成绩信息private Random rand = new Random();Icon icon=new ImageIcon("images/facebook2.gif");public int getSpeed() {return speed;}public void setSpeed(int speed) {this.speed = speed;}public boolean getIsLive() {return isLive;}public void setIsLive(boolean isLive) {this.isLive = isLive;}public long getStart() {return start;}public void setStart(long start) { this.start = start;}public long getEnd() {return end;}public void setEnd(long end) { this.end = end;}public Horse() {}public Horse(int x, int y) {super();this.x = x;this.y = y;}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}public void run() {this.setStart(System.currentTimeMillis());// TODO 自动生成的方法存根while(true){try {Thread.sleep(50);} catch (InterruptedException e) {e.printStackTrace();}this.speed = rand.nextInt(11);x += this.speed;this.setX(x);System.out.println(Thread.currentThread()+" x ="+this.getX()+" y ="+this.getY()+" isLive ="+this.getIsLive());synchronized (this) { //操作共享数据引入同步if(this.getX()>=1200){// synchronized (this) {this.setEnd(System.currentTimeMillis());this.setIsLive(false);++Horse.rank;// }break;}}}MyHorseRacing.staBut.setVisible(true);// this.setX(0);// long temp = this.getEnd() - this.getStart();// System.out.println("花费的时间为:"+temp+" ms ");Date date = new Date((this.getEnd() - this.getStart()));SimpleDateFormat sdf = new SimpleDateFormat("ss.SSS");String str = sdf.format(date);System.out.println(Thread.currentThread().getName()+"花费的时间为:"+str+" s ");System.out.println(Thread.currentThread().getName()+" 名次为:"+Horse.rank );Horse.sbf.append(Thread.currentThread().getName()+" 名次为:"+Horse.rank).append("\n花费的时间为:"+str+" s \n");// JOptionPane.showMessageDialog(null, Thread.currentThread().getName()+" 名次为:"+Horse.rank// +"\n花费的时间为:"+str+" s ", "比赛成绩", RMATION_MESSAGE);if(Horse.rank == MyHorseRacing.horsNum){JOptionPane.showMessageDialog(null, Horse.sbf, "比赛成绩", RMATION_MESSAGE,this.icon);}}}四、调试:1.首先设置马匹数:2.选择“开始”按钮:3.奔跑中的马匹:4.比赛结果:5.可按“重新开始按钮”继续比赛:五、总结、心得与收获经过一个星期的奋斗,终于基本实现了该程序应由的功能,但这不意味着程序就完美无缺,例如程序界面不够美观,“重新比赛”后不能再次设置马匹的数量,也没有考虑到各种异常的产生。
赛马游戏程序
赛马游戏程序代码
•mbar.add(systemMenu); •this.setJMenuBar(mbar); •jL1=new JLabel("欢迎来到赛马世界!"); •jL2=new JLabel("林情出品"); •jL3=new JLabel("1006003209"); •jL1.setFont(new Font("微软雅黑",Font.BOLD,25)); •jL2.setFont(new Font("微软雅黑",Font.BOLD,18)); •jL3.setFont(new Font("微软雅黑",Font.BOLD,15)); •jL1.setForeground(Color.BLUE); •jL2.setForeground(Color.RED); •jL3.setForeground(Color.black); •jL1.setBounds(50,30,300,100); •jL2.setBounds(230,80,300,100); •jL3.setBounds(230,100,300,100); •winContainer=this.getContentPane(); •winContainer.setLayout(null); •winContainer.add(jL1); •winContainer.add(jl2); •winContainer.add(jl3); •
2013-1-4
JAVA简介
• Java 不同于一般的编译执行计算机语言和解释执行计算机 语言。它首先将源代码编译成二进制字节码(bytecode), 然后依赖各种不同平台上的虚拟机来解释执行字节码,从 而实现了“一次编译、到处执行”的跨平台特性。不过, 每次的编译执行需要消耗一定的时间,这同时也在一定程 度上降低了 Java 程序的运行效率。但在 J2SE 1.4.2 发布后, Java 的执行速度有了大幅提升。与传统程序不同,Sun 公 司在推出 Java 之际就将其作为一种开放的技术。全球数以 万计的 Java 开发公司被要求所设计的 Java 软件必须相互 兼容。“Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与 微软公司所倡导的注重精英和封闭式的模式完全不同。
基于Java的超级玛丽游戏的设计与实现论文
分类号_______________ 密级________________UDC _______________ 学号_ ___ 毕业设计(论文)论文题目基于Java的超级玛丽游戏的设计与实现thesis Topic学生姓名学号所在院系专业班级导师姓名职称完成日期年月日基于java的超级玛丽游戏的设计与实现摘要近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用。
J2SE称为Java标准版或Java标准平台。
J2SE提供了标准的SDK开发平台。
利用该平台可以开发Java桌面应用程序和低端的服务器应用程序,也可以开发Java Applet程序。
“超级玛丽”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。
本游戏中通过总结和分析JAVA游戏的开发流程和代码功能的设计,采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。
开发了一款超级玛丽游戏,该游戏主要分为窗体类、场景类、马里奥类、敌人类、障碍物类等几个类。
在主程序运行的线程中,用户控制的超级玛丽随方向键的操作而移动,并且可以实现马里奥游戏中的一些基本功能,例如踩死敌人或者顶掉砖块。
本游戏采用双缓存技术,解决了游戏过程中的闪屏问题。
通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。
本文在介绍Java相关技术和国内外发展现状的基础上,对“超级玛丽”游戏的整个生命周期的各个开发阶段进行了详细地介绍。
为了保证程序代码的正确性和功能实现的可靠性,本文还介绍了游戏软件的程序调试过程和功能测试结果。
【关键字】:面向对象;Java;碰撞检测;超级玛丽Design and implementation of java-based Super Mario gameAbstractIn recent years, Java as a new programming language, with its simplicity, portability and platform independence, etc., have been widely used. J2SE called Java Standard Edition or Java standard platforms. J2SE SDK provides a standard development platform. You can use the platform to develop Java desktop applications and low-end server applications, you can develop Java Applet program."Super Mario" game is a classic game, because it is simple, entertaining and popular. The game features through the development process and code design summary and analysis of JA V A games, using object-oriented design patterns, all objects of the game gives the concept of objects and attributes. Developed a Super Mario game, the game is divided into several classes form class, class scene, Mario class, class enemies, obstacles and so on. In the main thread running, user-controlled Super Mario with the arrow keys to move the operation, and can achieve Mario game some basic functions, such as stepping on the enemy or top off the bricks. The game uses dual caching technology to solve the game during the splash screen problem. Through the development of this game, to learn Java technology and familiar with software development process purposes.This paper describes the state of the art related to the development of Java and abroad on the basis of the various development stages of "Super Mario" game for the entire life cycle of a detailed introduction. In order to ensure the correctness of the program code and functions to achieve reliability, this article describes the game software debugging process and functional test results.Key words: Object-Oriented,java,Collision Detection, Mario目录1、绪论 (5)1.1背景以及现状 (5)1.2 Java语言的特点 (5)1.3 系统运行环境及开发软件: (6)1.4 可行性的分析 (6)1.4.1 技术可行性 (6)1.4.2 经济可行性 (7)1.4.3 操作可行性 (7)2、需求分析 (7)2.1 用户需求分析 (7)2.2功能需求分析 (8)2.3界面设计需求分析 (8)3、系统概要设计 (8)3.1系统模块设计 (8)3.1.1窗体类 (9)3.1.2初始化类 (9)3.1.3背景类 (10)3.1.4马里奥类 (10)3.1.5障碍物类 (11)3.1.6敌人类 (11)3.2系统流程设计 (13)4、系统详细设计 (14)4.1 设计目标 (14)4.2 系统模块设计 (14)4.2.1窗体类 (14)4.2.2初始化类 (18)4.2.3背景类 (21)4.2.4马里奥类 (24)4.2.5障碍物类 (29)4.2.6敌人类 (31)5、系统的实现 (34)5.1游戏开发所需要的图片 (34)5.1.1马里奥的所有图片 (34)5.1.2游戏中障碍物的图片 (35)5.1.3游戏中怪物的图片 (35)5.1.4游戏中的背景图片 (36)5.1.5游戏开始时的图片 (36)5.2游戏设计的界面 (37)5.2.1 游戏逻辑展示 (37)5.2.1 游戏逻辑展示 (38)6、系统测试 (39)6.1 测试的意义 (39)6.2 测试过程 (40)6.3 测试结果 (40)7、总结与展望 (41)7.1 总结 (41)7.2 设计中的不足之处 (41)7.3 展望 (41)致谢 (42)外文原文 (43)外文翻译 (47)1、绪论1.1背景以及现状随着计算机日益普及,计算机已然成为人们日常生活的一部分的今天,计算机游戏也越来越成为人们生活中不可或缺的元素。
JAVA赛马游戏
游戏的登录界面
游戏的登录界面主要是为了迎合游戏的两个版本,两个版本的两个登录帐号都不 同。该界面写于【SelectPanel】类中。 帐号框主要是由【JTextField】声明的,密码框则是由【JPasswordField】声明。 界面的两个按钮主要是用来调用版本一【BetPanel】和版本二【BetPanel2】。当登 录版本一的时候,执行下面的程序:
图3
图4
游 戏 规 则 说 明 和 关 于 界 面
图5
图6
【关于】界面里面主要是显示的是制作者的信息显示,和游戏版 本的信息显示。如图5所示。 【游戏规则】界面主要是显示游戏规则,操作方式则不做介绍。 里面的内容主要采用了文本框【JTextArea】实现。如图6所示。
游戏版本一的进行界面
游戏结束界面பைடு நூலகம்示
图13
图14
图13是版本一的结束界面 图14是版本二的结束界面 图15是游戏的退出提示
图15
谢谢观赏
WPS Office
Make Presentation much more fun
@WPS官方微博 @kingsoftwps
图1
beginMenuItem=new JMenuItem("开始游戏"); beginMenuItem.addActionListener(this); initMenuItem=new JMenuItem("参数设定"); initMenuItem.addActionListener(this); aboutMenuItem=new JMenuItem("关于"); aboutMenuItem.addActionListener(this); exitMenuItem=new JMenuItem("退出"); exitMenuItem.addActionListener(this); helpMenuItem=new JMenuItem("帮助"); helpMenuItem.addActionListener(this); fileMenu=new JMenu("游戏"); systemMenu=new JMenu("系统");
《Java程序设计》课程设计任务书
《Java程序设计》课程设计任务书一.课程设计基本信息课程名称:《Java程序设计》课程设计学时:1周学分:1学分二.课程设计目的与要求1.教学目的:本课程是学习《Java程序设计》后的综合实践课,使学生能够比较深入的理解Java 语言的特征及体系;熟练的掌握并会运用Java语言与面向对象程序设计的思想和方法设计应用程序解决应用问题,积累程序设计的实践经验,为培养软件技术高技能人才奠定基础。
本课程是培养计划中综合性较强的实践教学环节之一,帮助学生掌握教学内容、培养学生运用知识解决应用问题的实际动手能力、提高学生综合素质有很重要的意义。
2.教学要求:本课程设计以设计一个或多个实际应用系统为目的,通过课程设计让学生较全面的掌握Java语法基础知识、面向对象程序设计方法,尤其是基于Java的应用程序设计的方法与技术,能够运用J2SE平台,结合相应的数据库系统开发应用程序,理论联系实际,达到培养实践操作技能的目的。
学生要了解Java程序开发的一般过程,特别掌握系统分析与设计的基本方法,写出系统分析与设计报告,并能设计真实可用的应用系统。
三.课程设计内容与安排根据老师提供的设计题目,写出系统分析与设计报告,并建立原型系统。
题目可以由教师与学生根据实际情况商定,可参考的题目:图书借阅管理系统、产品管理系统、学生成绩管理、学生信息管理、人事管理、人力资源管理系统、物流信息管理系统等。
1.主要设计内容如下:(1)系统设计:包括系统需求分析、总体设计和功能设计,必要时使用图表说明。
(2)各功能模块设计:包括用户界面及相应功能算法等设计。
(3)各功能模块实现:各功能模块算法程序编写。
2.教学安排总课时30课时,其中需求分析与系统设计、数据库设计与实现、系统各模块实现所以及系统集成调试运行用时间建议各占15%,15%,40%,20%的课时,学生可根据具体情况调整,利用10%的时间完成课程设计报告。
四.课程设计教学建议及要求1.要求学生有一定的程序设计和数据库基础知识,由老师指定或学生自行组织形成项目小组,必要时由多人开发一个项目,其中需要指定负责项目的小组长控制项目进度。
JAVA课程设计之赛马游戏
目录一.需求分析................................... 错误!未定义书签。
概述 (2)课题分析 (2)实现功能步骤................................. 错误!未定义书签。
设计工作详解................................. 错误!未定义书签。
外部界面需求................................. 错误!未定义书签。
;运行环境...................................................错误!未定义书签。
二.概要设计................................... 错误!未定义书签。
系统流程图................................... 错误!未定义书签。
功能模块图................................... 错误!未定义书签。
赛马比赛模拟程序初始化块 (4)赛马比赛区模块 (4)投注区模块 (5)线程启动及结束模块 (5)>比赛结果显示区模块 (5)三.详细设计................................... 错误!未定义书签。
赛马比赛模拟程序初始化模块 (6)赛马比赛区模块 (7)错误!未定义书签。
投注区模块错误!未定义书签。
线程启动及结束模块9比赛结果显示区模块.........................................12错误!未定义书签。
程序流程...................................................12错误!未定义书签。
~系统界面...................................................错误!未定义书签。
四.调试分析 (13)调试过程中所遇到的问题及解决方法............. 错误!未定义书签。
java课程设计马里奥
java课程设计马里奥一、教学目标本节课的学习目标包括以下三个方面:1.知识目标:学生需要掌握Java编程语言的基本语法和结构,了解面向对象编程的基本概念和方法。
2.技能目标:学生能够运用Java编程语言实现简单的马里奥游戏,培养学生的编程能力和解决问题的能力。
3.情感态度价值观目标:通过学习Java编程,激发学生对计算机科学的兴趣,培养学生的创新精神和团队合作意识。
二、教学内容本节课的教学内容主要包括以下几个部分:1.Java编程语言的基本语法和结构,如变量、数据类型、运算符、控制语句等。
2.面向对象编程的基本概念和方法,如类、对象、封装、继承、多态等。
3.马里奥游戏的设计与实现,包括游戏窗口的创建、游戏角色的控制、游戏逻辑的实现等。
三、教学方法本节课的教学方法采用以下几种方式:1.讲授法:教师讲解Java编程语言的基本语法和结构,以及面向对象编程的基本概念和方法。
2.案例分析法:通过分析马里奥游戏的案例,让学生了解游戏设计与实现的过程,培养学生的编程能力和解决问题的能力。
3.实验法:学生动手实践,编写Java代码实现简单的马里奥游戏,培养学生的动手能力和创新能力。
四、教学资源本节课的教学资源包括以下几种:1.教材:《Java编程语言》2.多媒体资料:PPT课件、马里奥游戏案例视频等。
3.实验设备:计算机、网络等。
以上是本节课的教学设计,希望学生能够在课堂上充分学习,提高自己的编程能力,培养自己的创新精神。
五、教学评估本节课的评估方式包括以下几个方面:1.平时表现:通过观察学生在课堂上的参与程度、提问回答等情况,评估学生的学习态度和积极性。
2.作业:通过学生提交的作业,评估学生对Java编程语言的基本语法和结构的掌握程度。
3.考试:通过期末考试,评估学生对Java编程语言的整体掌握程度,包括语法、面向对象编程等知识点。
评估方式应客观、公正,能够全面反映学生的学习成果。
教师应及时给予学生反馈,帮助学生提高。
java课程设计-马匹赛跑
在比赛的界面,使用的是BorderLayout布局,采用了按钮、面版等组件。按钮的功能包括开始和重新开始,点击开始,比赛就会开始,等到马匹都跑到终点,点击重新开始,比赛到达终点的马匹就会重新回到起点,然后点击开始,比赛就会重新开始。并且为按钮设置了监听器,点击按钮就会触发监听器,执行相应的动作。
Horse.sbf.append(Thread.currentThread().getName()+"名次为:"+Horse.rank).append("\n花费的时间为:"+str+" s \n");
if(Horse.rank == MyHorseRacing.horsNum){
JOptionPane.showMessageDialog(null, Horse.sbf, "比赛成绩", RMATION_MESSAGE,this.icon);
* @param x设置马的横坐标
* @param y设置马的纵坐标
*/
public Horse(int x, int y) {
super();
this.x = x;
this.y = y;
}
/**
* @return返回int型,得到马的横坐标x
*/
public int getX() {
return x;
1.3马匹的实现方法
写了一个马匹的类,用来封装马匹的属性。包括马匹的速度、坐标、是否存活、是否开始比赛、是否完成比赛等属性。每匹马的速度不是固定的,通过一个随机函数来实现马匹在整个过程中的动态速度。一开始马匹的坐标是固定的。初始化马匹是存活的,是开始准备比赛。通过这样的一个类来封装马匹的属性,更加便于我们管理。
java赛马游戏
赛马游戏源代码:(截图)package com.guigu.king.core;public interface HandleListener{/*** 完成比赛*/public void gameHourse(HourseEvent e);/*** 比赛结束(线程结局)*/public void gameOver(HourseEvent e); }package com.guigu.king.core;public class HourseEvent{private Object source=null;private boolean error=false;private Exception exception=null;public HourseEvent(Object source){this.source=source;}public Object getSource() {return source;}public boolean isError() {return error;}public void setError(boolean error) {this.error = error;}public Exception getException() {return exception;}public void setException(Exception exception) { this.exception = exception;}}package com.guigu.king.core;import java.awt.Image;import java.awt.Toolkit;import java.util.Random;/*** 赛马类* @author Administrator*/public class HourseRace implements Runnable{public HandleListener handle=null;public void addHandleListener(HandleListener handle){this.handle=handle;}private String name="";//赛马名称private Image img=null;//赛马图片private int length=0;//赛马的步长(每跑一步的距离)private int[] rate=null;//赛马的步频(每一次奔跑的时间间隔)public HourseRace(String name,String imgPath,int length,int[] rate) {=name;this.img=Toolkit.getDefaultToolkit().getImage(imgPath);this.length=length;this.rate=rate;}private int x=0;//赛马当前赛跑的位置private int range=0;//赛跑的距离private int stop=0;//赛跑的距离public void setRaceData(int range,int stop){this.x=0;this.range=range;this.stop=stop;}public void run(){HourseEvent event=new HourseEvent(this);try{boolean b=true;Random r=new Random();while(true){int n=r.nextInt(rate.length);if (b && this.x>=this.range-116){b=false;if (handle!=null) handle.gameHourse(event);}this.x=this.x+this.length;Thread.sleep(rate[n]);if (x>=this.stop){break;}}}catch(Exception e){event.setError(true);event.setException(e);}this.x=0;if (handle!=null) handle.gameOver(event);}public String getName() {return name;}public Image getImg() {return img;}public int getX() {return x;}}package com.guigu.king.core;/*** 赛场类* @author Administrator*/public class Match{private String name="";//赛场的名称private int range=0;//赛跑的距离private int stop=0;//停跑的距离private HourseRace[] track=null;//赛道数量private int HourseRaceCount=0;//赛马数量public Match(String name,int range,int stop,int count) {=name;this.range=range;this.stop=stop;this.track=new HourseRace[count];}public void addHourseRace(HourseRace hr){if (hr!=null){hr.setRaceData(range, stop);if (this.HourseRaceCount<this.track.length){this.track[this.HourseRaceCount]=hr;this.HourseRaceCount++;}}}public int getMatchTrack(){return this.track.length;}public HourseRace getHourseRace(int index){return this.track[index];}public String getName() {return name;}public int getRange() {return range;public int getStop() {return stop;}}package com.guigu.king.exec;public class CMain{/*** @param args*/public static void main(String[] args){MainFrame mf=new MainFrame();mf.setVisible(true);}}package com.guigu.king.exec;import java.awt.*;import javax.swing.*;import com.guigu.king.core.*;public class GraphicPanel extends JPanel{/****/private static final long serialVersionUID = 2441325657329104186L;private Match match=null;public GraphicPanel(Match match){this.match=match;this.setBackground(Color.WHITE);}//绘图函数:函数重写,该函数的调用,是由系统调用。
JAVA课程设计题目
JAVA课程设计题目Java课程设计题目一、课程设计总体要求:本次课程设计是对前面学过的所有面向对象的编程思想以及编程方法的一个总结、回顾和实践,因此,开始设计前学生一定要先回顾以前所学的内容,明确本次作业设计所要用到的技术点并到网上搜索以及查阅相关的书籍来搜集资料。
通过编写一个基于JA V A的应用系统综合实例,来掌握Java语言编程技巧。
二、参考题目及要求:1、编写一个记事本程序要求:用图形用户界面实现。
能实现编辑、保存、另存为、查找替换等功能。
提示:使用文件输入输出流。
2、模拟龟兔赛跑要求:用图形用户界面实现。
能设置比赛时间,马匹的数量等等。
在任意时间段内马匹的速度是随机的。
开始比赛之后以动画显示赛马过程。
提示:使用多线程3、学生信息管理系统要求:使用图形用户界面用数据库建立1或2个学生信息表。
(不限使用哪种数据库)能连接数据库并实现查询、增、删、改等功能。
4、图书信息管理系统要求:使用图形用户界面用数据库建立1或2个图书信息表。
(不限使用哪种数据库)能连接数据库并实现查询、增、删、改等功能。
5、聊天小程序要求:使用图形用户界面。
能实现一个聊天室中多人聊天。
可以两人私聊。
提示:使用socket通信6、ATM柜员机模拟程序要求:使用图形用户界面。
当输入给定的卡号和密码(初始卡号和密码为123456)时,系统能登录ATM柜员机系统,用户可以按照以下规则进行:1、查询余额:初始余额为10000元2、A TM取款:每次取款金额为100的倍数,总额不超过5000元,支取金额不允许透支。
3、A TM存款:不能出现负存款。
4、修改密码:新密码长度不小于6位,不允许出现6位完全相同的情况,只有旧密码正确,新密码符合要求,且两次输入相同的情况下才可以成功修改密码。
7、超市收银系统要求:使用图形用户界面。
由收银员输入顾客的会员卡卡号(若有卡)、所购商品的货号等。
从数据库中取出有关价格信息,再把这些信息返回给收银台。
java-实训报告
陕西工业职业技术学院2012/2013学年第1学期Java 程序设计项目训练报告书课程名称: Java 程序设计项目训练班级:软件1101/02 学号: 0405110234姓名:朱佳佳地点:行知楼仿真实训室指导教师:蔡创蔡苏亚2012/2013学年第1学期Java程序设计项目训练任务书一、实训对象与实训环境实训班级:软件1101/1102实训时间:2个教学周实训人数:85人实训环境:Windows XP,JDK1.5 ,JCreator pro 4.5二、实训教学目标与要求目的:使学生在学习《Java程序设计》这门课程的过程中,能够掌握Java面向对象编程的基础知识,并进行Java开发环境的搭建,能够熟练地使用Jcreator开发Java程序。
要求:(1)在系统的E盘(或其它非保护逻辑盘)建立名为“学号姓名”的文件夹(如040X110XXX某某),本次实训所上交的作业,均保存在该文件夹内;然后在自己的“学号姓名”文件夹中再创建子文件夹——实训1、实训2、实训3、实训4、实训5、实训6,各实训内容分别保存在对应子文件夹中(操作时加以注意)。
(2)上交作业分为两部分:程序文件(通过记事本、JCreator开发出的Java程序,保存在各对应子文件夹中——实训X)和专用周报告书(以文字+图片的形式对本次实训的任务、实现过程和程序运行结果加以描述,制作word文档报告书,报告书1份直接保存在“学号姓名”文件夹中)。
(3)编写源程序时(无论在何种环境下),请同学们在源程序中以加注释的方式注明自己的姓名。
三、实训内容实训一搭建Java开发环境(第课时)实训目的:1.掌握Java开发环境的搭建。
2.掌握利用JDK+DOS+记事本编写、编译、运行简单Java程序的方法。
实训内容:1、安装并配置JDK1.5(要求:使用两种方式配置path变量)a)创建变量JAVA_HOME之后,再配置pathb)创建变量JAVA_HOME之后,再配置path2、使用记事本编写一个简单的Java程序(如输出一句话),在DOS中利用jdk1.5对其进行编译、运行。
赛马游戏的java设计_赛马游戏源码
赛马游戏的java设计_赛马游戏源码0)Intro_pos++;// g.setClip(10,10,HorseMidlet.imgIntro[0].getWidth() , HorseMidlet.imgIntro[0].getHeight());// g.drawImage(HorseMidlet.imgIntro[0], 10,-Intro_pos+10, g.LEFT | g.TOP);// g.setClip(0, 0, getCanvasWidth(),getCanvasHeight());g.setClip(0,0,HorseMidlet.imgIntro[0].getWidth() , HorseMidlet.imgIntro[0].getHeight());g.drawImage(HorseMidlet.imgIntro[0], 0,-Intro_pos, g.LEFT | g.TOP);// if (Intro_pos==HorseMidlet.imgIntro[0].getHeight()-getCanvasHeight()-100)// {// g.drawImage(HorseMidlet.imgIntro[1], 3,getCanvasHeight()-60, g.LEFT | g.TOP);// }g.setClip(0, 0, getCanvasWidth(),getCanvasHeight());try{Thread.sleep(8);repaint();}catch(InterruptedException ie){System.out.println(ie.toString());}break;case HorseMidlet.GAME_STATE_LOT:// imgMenu = null;// imgDot = null;//draw lotif(HorseMidlet.substate==0)lot_no=HorseMidlet.firstlot_no;lot_money=HorseMidlet.firstlot_money;}if(HorseMidlet.substate==1){lot_no=HorseMidlet.secondlot_no;lot_money=HorseMidlet.secondlot_money;}// Image[] imgLot=new Image[1];// imgLot=HorseMidlet.getImages("lothorse",1);g.setColor(105,117,184);g.fillRect(0,0,getCanvasWidth(),getCanvasHeight());// g.drawImage(imgLot[0],10,7,g.LEFT|g.TOP);g.drawImage(imgLot[0],0,7,g.LEFT|g.TOP);g.setColor(0,0,0);// g.fillRect(10,46,40,14);g.fillRect(0,46,40,14);//draw the nameg.setColor(255,255,255);// g.drawChars(myHorseRacing.horses[lot_no].m_HorseName,0,3,28,59,1);g.drawChars(myHorseRacing.horses[lot_no].m_HorseName,0,3,18,59,1);// Image[] imgTextFirstLot=new Image[1];if(HorseMidlet.substate==0){// imgTextFirstLot = HorseMidlet.getImages("text_firston", 1);g.drawImage(imgTextFirstLot1[0],0,61,g.LEFT|g.TOP);}else{// imgTextFirstLot = HorseMidlet.getImages("text_firstoff", 1);g.drawImage(imgTextFirstLot2[0],0,61,g.LEFT|g.TOP);}// g.drawImage(imgTextFirstLot[0],10,61,g.LEFT|g.TOP);// Image[] imgTextSecondLot=new Image[1];if(HorseMidlet.substate==1){// imgTextSecondLot = HorseMidlet.getImages("text_secondon", 1); g.drawImage(imgTextSecondLot1[0],0,74,g.LEFT|g.TOP);}else{// imgTextSecondLot = HorseMidlet.getImages("text_secondoff", 1);g.drawImage(imgTextSecondLot2[0],0,74,g.LEFT|g.TOP);}// g.drawImage(imgTextSecondLot[0],10,74,g.LEFT|g.TOP);// g.drawImage(imgTextSecondLot[0],0,74,g.LEFT|g.TOP);//draw the horse infog.setColor(255,180,0);// g.fillRect(60,7,getCanvasWidth()/2+20,getCanvasHeight()/2+4);//右上⾓g.fillRect(50,7,76,getCanvasHeight()/2+4);g.setColor(0,0,0);// g.drawRect(60,7,getCanvasWidth()/2+20,getCanvasHeight()/2+4);g.drawRect(50,7,76,getCanvasHeight()/2+4);g.setColor(255,255,255);//draw horse info text// Image[] imgTextRacingNum=new Image[1];// imgTextRacingNum=HorseMidlet.getImages("text_racingnum",1);// g.drawImage(imgTextRacingNum[0],70,13,g.LEFT|g.TOP);g.drawImage(imgTextRacingNum[0],55,13,g.LEFT|g.TOP);// Image[] imgTextAge=new Image[1];// imgTextAge=HorseMidlet.getImages("text_age",1);// g.drawImage(imgTextAge[0],70,27,g.LEFT|g.TOP);g.drawImage(imgTextAge[0],55,27,g.LEFT|g.TOP);// Image[] imgTextExp=new Image[1];// imgTextExp=HorseMidlet.getImages("text_exp",1);g.drawImage(imgTextExp[0],55,41,g.LEFT|g.TOP);// Image[] imgTextEndur=new Image[1];// imgTextEndur=HorseMidlet.getImages("text_endur",1);// g.drawImage(imgTextEndur[0],70,55,g.LEFT|g.TOP);g.drawImage(imgTextEndur[0],55,55,g.LEFT|g.TOP);// Image[] imgTextHealth=new Image[1];// imgTextHealth=HorseMidlet.getImages("text_health",1);// g.drawImage(imgTextHealth[0],70,69,g.LEFT|g.TOP);g.drawImage(imgTextHealth[0],55,69,g.LEFT|g.TOP);/* g.drawString(ng.Integer.toString(myHorseRacing.horses[lot_no ].m_No),140,22,1);g.drawString(ng.Integer.toString(myHorseRacing.horses[lot_no]. m_HorseAge),142,34,1);g.drawString(ng.Integer.toString(myHorseRacing.horses[lot_no]. m_HorseEx),140,50,1);g.drawString(ng.Integer.toString(myHorseRacing.horses[lot_no]. m_HorseEndur),140,64,1);g.drawString(ng.Integer.toString(myHorseRacing.horses[lot_no]. m_HorseHealth),140,78,1);*/g.drawString(ng.Integer.toString(myHorseRacing.horses[lot_no]. m_No),112,22,1);g.drawString(ng.Integer.toString(myHorseRacing.horses[lot_no]. m_HorseAge),112,34,1);g.drawString(ng.Integer.toString(myHorseRacing.horses[lot_no]. m_HorseEx),110,50,1);g.drawString(ng.Integer.toString(myHorseRacing.horses[lot_no]. m_HorseEndur),110,64,1);g.drawString(ng.Integer.toString(myHorseRacing.horses[lot_no]. m_HorseHealth),110,78,1);//draw lot info boxg.setColor(255,180,0);// g.fillRect(10,getCanvasHeight()/2+18,getCanvasWidth()/2+20,44);g.setColor(0,0,0);// g.drawRect(10,getCanvasHeight()/2+18,getCanvasWidth()/2+20,44);g.drawRect(0,getCanvasHeight()/2+18,87,44);// Image[] imgTextTotalMoney=new Image[1];// imgTextTotalMoney=HorseMidlet.getImages("text_totalmoney",1);// g.drawImage(imgTextTotalMoney[0],17,92,g.LEFT|g.TOP);g.drawImage(imgTextTotalMoney[0],2,92,g.LEFT|g.TOP);g.setColor(0,0,0);// g.fillRect(70,92,40,12);g.fillRect(49,92,35,12);// g.drawLine(10,105,10+getCanvasWidth()/2+20,105);g.drawLine(0,105,87,105);// Image[] imgTextLotNum=new Image[1];// imgTextLotNum=HorseMidlet.getImages("text_lotnum",1);// g.drawImage(imgTextLotNum[0],17,106,g.LEFT|g.TOP);g.drawImage(imgTextLotNum[0],2,106,g.LEFT|g.TOP);// g.fillRect(70,106,40,12);// g.drawLine(10,119,10+getCanvasWidth()/2+20,119);g.fillRect(49,106,35,12);g.drawLine(0,119,87,119);// Image[] imgTextLotMoney=new Image[1];// imgTextLotMoney=HorseMidlet.getImages("text_lotmoney",1);// g.drawImage(imgTextLotMoney[0],17,120,g.LEFT|g.TOP);// g.fillRect(70,120,40,12);g.drawImage(imgTextLotMoney[0],2,120,g.LEFT|g.TOP);g.fillRect(49,120,35,12);//draw lot infog.setColor(255,255,255);// g.drawString(ng.Integer.toString(HorseMidlet.mytotalmoney),8 5,103,1);g.drawString(ng.Integer.toString(HorseMidlet.mytotalmoney),63, 103,1);if(lot_select==0)g.setColor(0,255,80);}else{g.setColor(255,255,255);}// g.drawString(ng.Integer.toString(lot_no+1), 85,// 117, 1);g.drawString(ng.Integer.toString(lot_no+1), 63,117, 1); if(lot_select==1){g.setColor(0,255,80);}else{g.setColor(255,255,255);}// g.drawString(ng.Integer.toString(lot_money),// 85, 131, 1);g.drawString(ng.Integer.toString(lot_money), 63, 131, 1); // Image[] imgTextOK=new Image[1];if(HorseMidlet.substate==2){// imgTextOK = HorseMidlet.getImages("text_okon", 1);g.drawImage(imgTextOK1[0],89,93,g.LEFT|g.TOP);}else{// imgTextOK = HorseMidlet.getImages("text_okoff", 1);g.drawImage(imgTextOK2[0],89,93,g.LEFT|g.TOP);}// g.drawImage(imgTextOK[0],128,93,g.LEFT|g.TOP);// g.drawImage(imgTextOK[0],89,93,g.LEFT|g.TOP);if(HorseMidlet.substate==3){// imgTextReset = HorseMidlet.getImages("text_reseton", 1);g.drawImage(imgTextReset1[0],89,108,g.LEFT|g.TOP);}else{// imgTextReset = HorseMidlet.getImages("text_resetoff", 1);g.drawImage(imgTextReset2[0],89,108,g.LEFT|g.TOP);}// g.drawImage(imgTextReset[0],128,108,g.LEFT|g.TOP);// g.drawImage(imgTextReset[0],89,108,g.LEFT|g.TOP);// Image[] imgTextBack=new Image[1];if(HorseMidlet.substate==4){// imgTextBack = HorseMidlet.getImages("text_backon", 1);g.drawImage(imgTextBack1[0],89,123,g.LEFT|g.TOP);}else{// imgTextBack = HorseMidlet.getImages("text_backoff", 1);g.drawImage(imgTextBack2[0],89,123,g.LEFT|g.TOP);}// g.drawImage(imgTextBack[0],128,123,g.LEFT|g.TOP);// g.drawImage(imgTextBack[0],89,123,g.LEFT|g.TOP);break;case HorseMidlet.GAME_STATE_RACING:drawAnimation(g);g.setColor(127,0,0);// g.drawString(Long.toString(Runtime.getRuntime().totalMemory()),10 ,10,g.TOP|g.LEFT);// g.drawString(Long.toString(Runtime.getRuntime().freeMemory()),10,3 0,g.TOP|g.LEFT);case HorseMidlet.GAME_STATE_RACINGEND:drawAnimation(g);Image[] imgWin=new Image[1];imgWin=HorseMidlet.getImages("win",1);// g.drawImage(imgWin[0],40,20,g.LEFT|g.TOP);g.drawImage(imgWin[0],20,20,g.LEFT|g.TOP);int i,gold,goldi,silver,silveri,goldbonus=0,silverbonus;gold=myHorseRacing.xHorsePos[0];goldi=0;for(i=1;i<8;i++){if(gold{ gold=myHorseRacing.xHorsePos[i];goldi=i;}}silveri=-1;silver=-1;for(i=0;i<7;i++){if(goldi==i)continue;if(silveri==-1||silver{ silver=myHorseRacing.xHorsePos[i];silveri=i;}}//draw numberg.setColor(200,0,0);/* g.drawChars(myHorseRacing.horses[goldi].m_HorseName,0,3,61,61,1);g.drawString(ng.Integer.toString(myHorseRacing.horses[goldi].m_ No),70,64,0);g.drawChars(myHorseRacing.horses[silveri].m_HorseName,0,3,61,113,1);g.drawString(ng.Integer.toString(myHorseRacing.horses[silveri].m_No),70,116,0);*/g.drawChars(myHorseRacing.horses[goldi].m_HorseName,0,3,41,61,1);g.drawString(ng.Integer.toString(myHorseRacing.horses[goldi].m_No), 52,75,1);g.drawChars(myHorseRacing.horses[silveri].m_HorseName,0,3,41,113,1);),52,127,1);//calculate the bonusif(HorseMidlet.myhorse.m_No<9){//bingo,Youself got the gold/silverif(HorseMidlet.myhorse.m_No==goldi)HorseMidlet.myhorse.m_golds++;elseif(HorseMidlet.myhorse.m_No==silveri)HorseMidlet.myhorse.m_silvers++;}if(HorseMidlet.firstlot_no==goldi)//First Lot got gold{if(HorseMidlet.myhorse.m_No==HorseMidlet.firstlot_no)goldbonus=HorseMidlet.MONEY_GOLD_MUL_M*HorseMidlet.firstlot_money;elsegoldbonus=HorseMidlet.MONEY_GOLD_MUL*HorseMidlet.firstlot_money;}elseif(HorseMidlet.secondlot_no==goldi)//Second Lot got gold{if(HorseMidlet.myhorse.m_No==HorseMidlet.secondlot_no)goldbonus=HorseMidlet.MONEY_GOLD_MUL_M*HorseMidlet.secondlot_m oney;elsegoldbonus=HorseMidlet.MONEY_GOLD_MUL*HorseMidlet.secondlot_mon ey;}else goldbonus=0;if(HorseMidlet.firstlot_no==silveri)//First Lot got gold{if(HorseMidlet.myhorse.m_No==HorseMidlet.firstlot_no).firstlot_money;elsesilverbonus=HorseMidlet.MONEY_SILVER_MUL*HorseMidlet.firstlot_money;}elseif(HorseMidlet.secondlot_no==silveri)//Second Lot got gold{if(HorseMidlet.myhorse.m_No==HorseMidlet.secondlot_no)silverbonus=HorseMidlet.MONEY_SILVER_MUL_M*HorseMidlet.secondl ot_money;elsesilverbonus=HorseMidlet.MONEY_SILVER_MUL*HorseMidlet.secondlot _money;}else silverbonus=0;//draw the bonus// g.drawString(ng.Integer.toString(goldbonus),110,75,1);// g.drawString(ng.Integer.toString(silverbonus),110,127,1);g.drawString(ng.Integer.toString(goldbonus),93,75,1);g.drawString(ng.Integer.toString(silverbonus),93,127,1);if(HorseMidlet.myhorse.m_No<9){Random rand=new Random();if((rand.nextInt()%100)>HorseMidlet.MATCH_WOUND_RATIO){HorseMidlet.myhorse.m_HorseHealth-=rand.nextInt()%HorseMidlet.WOUND_MAX;}}HorseMidlet.mytotalmoney+=goldbonus+silverbonus;stop();//stop the animationbreak;case HorseMidlet.GAME_STATE_TRAINING:g.setColor(255,180,0);g.fillRect(0,0,getCanvasWidth(),getCanvasHeight());g.drawImage(HorseMidlet.imgTrainTop[0],10,10,g.LEFT|g.TOP);g.drawImage(HorseMidlet.imgTrainBack[0],10,26,g.LEFT|g.TOP);g.drawImage(HorseMidlet.imgTextShort[0],10,130,g.LEFT|g.TOP);g.drawImage(HorseMidlet.imgTextLong[0],40,130,g.LEFT|g.TOP);g.drawImage(HorseMidlet.imgTextRst[0],70,130,g.LEFT|g.TOP);g.drawImage(HorseMidlet.imgTextBackMenu_off[0],100,130,g.LEFT|g.TOP); if(HorseMidlet.substate==0)g.drawImage(HorseMidlet.imgTextShort[1],10,130,g.LEFT|g.TOP);else if(HorseMidlet.substate==1)g.drawImage(HorseMidlet.imgTextLong[1],40,130,g.LEFT|g.TOP);else if(HorseMidlet.substate==2)g.drawImage(HorseMidlet.imgTextRst[1],70,130,g.LEFT|g.TOP);else if(HorseMidlet.substate==3)g.drawImage(HorseMidlet.imgTextBackMenu[0],100,130,g.LEFT|g.TOP); break;case HorseMidlet.GAME_STATE_TRAINING_SHORT:g.setColor(255,180,0);g.fillRect(0,0,getCanvasWidth(),getCanvasHeight());g.drawImage(HorseMidlet.imgTrainTop[0],10,10,g.LEFT|g.TOP);g.drawImage(HorseMidlet.imgTrainRunning[0],10,26,g.LEFT|g.TOP);ReadyToSleep++;if(ReadyToSleep==1){repaint();}else if(ReadyToSleep==2) {ReadyToSleep=0;try{Thread.sleep(3000);HorseMidlet.gamestate=HorseMidlet.GAME_STATE_TRAINING; repaint();}catch(InterruptedException ie){System.out.println(ie.toString());}}break;case HorseMidlet.GAME_STATE_TRAINING_LONG:g.setColor(255,180,0);g.fillRect(0,0,getCanvasWidth(),getCanvasHeight());g.drawImage(HorseMidlet.imgTrainTop[0],10,10,g.LEFT|g.TOP );g.drawImage(HorseMidlet.imgTrainRunning[0],10,26,g.LEFT|g. TOP);ReadyToSleep++;if(ReadyToSleep==1){repaint();}else if(ReadyToSleep==2) {ReadyToSleep=0;try{Thread.sleep(3000);HorseMidlet.gamestate=HorseMidlet.GAME_STATE_TRAINING; repaint();}catch(InterruptedException ie){System.out.println(ie.toString());}}break;case HorseMidlet.GAME_STATE_TRAINING_REST:g.setColor(255,180,0);g.fillRect(0,0,getCanvasWidth(),getCanvasHeight());g.drawImage(HorseMidlet.imgTrainTop[0],10,10,g.LEFT|g.TOP);g.drawImage(HorseMidlet.imgTrainRest[0],10,26,g.LEFT|g.TOP); ReadyToSleep++;if(ReadyToSleep==1){repaint();}else if(ReadyToSleep==2) {ReadyToSleep=0;try{Thread.sleep(3000);HorseMidlet.gamestate=HorseMidlet.GAME_STATE_TRAINING; repaint();}catch(InterruptedException ie){System.out.println(ie.toString());}}break;*/}}private void drawAnimation(Graphics gr){Graphics g=gr;if(this.isDoubleBuffered()){g=graphics;}try{myHorseRacing.setFrame();myHorseRacing.draw(g);gr.drawImage(buffer,0,0,g.TOP|g.LEFT);}catch(Exception e){System.out.println("drawAnimation Error: "+e.toString());}}public void commandAction(Command c, Displayable d){//if any Exit key is pressed then exitif(c==exit){midlet.exitMidlet();}// else if(c==memory)else if (c == newGame){// midlet.startApp();HorseMidlet.gamestate=HorseMidlet.GAME_STATE_START; HorseMidlet.substate=0;HorseMidlet.difficulty=10;// HorseMidlet.gamestate=0;HorseMidlet.substate=0;HorseMidlet.mytotalmoney=1000;HorseMidlet.firstlot_no=0;HorseMidlet.firstlot_money=50;HorseMidlet.secondlot_no=1;HorseMidlet.secondlot_money=50;// HorseMidlet.myhorse=new HorseX(30,40,50,9);myHorseRacing.init();/* imgMenu=new Image[1];imgDot= new Image[1];imgMenu=HorseMidlet.getImages("menu",1);System.out.println("Free memory: MENU"+Runtime.getRuntime().freeMemory() );imgDot=HorseMidlet.getImages("bluedot",1);System.out.println("Free memory: BLUEDOT"+Runtime.getRuntime().freeMemor y());*/stop();// sumTemp = 1;repaint();// c = null;}}protected void keyPressed(int keyCode){// can't continue playing until the player restartsint gameAction = getGameAction(keyCode);switch (gameAction){case FIRE:if (HorseMidlet.gamestate==HorseMidlet.GAME_STATE_START){if(HorseMidlet.substate==0){HorseMidlet.gamestate=HorseMidlet.GAME_STATE_LOT;HorseMidlet.mytotalmoney-=HorseMidlet.firstlot_money;}else if(HorseMidlet.substate==1)//introduce{HorseMidlet.gamestate=HorseMidlet.GAME_STATE_INTRO;Intro_pos=0;HorseMidlet.substate=0;}else if(HorseMidlet.substate==2)//exitmidlet.exitMidlet();}else if (HorseMidlet.gamestate==HorseMidlet.GAME_STATE_INTRO){HorseMidlet.gamestate=HorseMidlet.GAME_STATE_START;HorseMidlet.substate=0;}else if (HorseMidlet.gamestate==HorseMidlet.GAME_STATE_RACINGEND) {myHorseRacing.init();HorseMidlet.gamestate=HorseMidlet.GAME_STATE_LOT;HorseMidlet.mytotalmoney-=HorseMidlet.firstlot_money;HorseMidlet.substate=0;}else if (HorseMidlet.gamestate==HorseMidlet.GAME_STATE_LOT){if(HorseMidlet.substate==2){HorseMidlet.gamestate=HorseMidlet.GAME_STATE_RACING; HorseMidlet.horseruningspeed=HorseMidlet.MAX_SPEED;HorseMidlet.screenscroll=0;HorseMidlet.trainingtime=0;HorseMidlet.beginwait=0;HorseMidlet.showbeginbar=1; //show itHorseMidlet.racingend=-1;//just beginstart();//start a animation thread;}if(HorseMidlet.substate<2)HorseMidlet.substate++;if(HorseMidlet.substate==1){HorseMidlet.secondlot_money=HorseMidlet.BIT_LOT_MONEY;HorseMidlet.mytotalmoney-=HorseMidlet.secondlot_money; HorseMidlet.secondlot_no=HorseMidlet.firstlot_no+1;if(HorseMidlet.secondlot_no>7)HorseMidlet.secondlot_no=0;}if(HorseMidlet.substate==3)//reset{HorseMidlet.mytotalmoney= HorseMidlet.mytotalmoney+HorseMidlet.firstlot_money+HorseMidlet.secondlot_money-HorseMidlet.BIT_LOT_MONEY;HorseMidlet.firstlot_money=HorseMidlet.BIT_LOT_MONEY; HorseMidlet.firstlot_no=0;HorseMidlet.substate=0;}if(HorseMidlet.substate==4)//back{HorseMidlet.mytotalmoney= HorseMidlet.mytotalmoney+HorseMidlet.firstlot_money+HorseMidlet.secondlot_money;HorseMidlet.firstlot_money=HorseMidlet.BIT_LOT_MONEY; HorseMidlet.firstlot_no=0;HorseMidlet.gamestate=HorseMidlet.GAME_STATE_START; HorseMidlet.substate=0;}}else if (HorseMidlet.gamestate==HorseMidlet.GAME_STATE_TRAINING) {if(HorseMidlet.substate==0)HorseMidlet.gamestate=HorseMidlet.GAME_STATE_TRAINING_SHORT; else if(HorseMidlet.substate==1)HorseMidlet.gamestate=HorseMidlet.GAME_STATE_TRAINING_LONG; else if(HorseMidlet.substate==2)HorseMidlet.gamestate=HorseMidlet.GAME_STATE_TRAINING_REST;{HorseMidlet.gamestate = HorseMidlet.GAME_STATE_START; HorseMidlet.substate=0;}}sumTemp = 0;break;case RIGHT:if (HorseMidlet.gamestate==HorseMidlet.GAME_STATE_LOT){if (HorseMidlet.substate == 0) { //the first lotif (lot_select == 0) {HorseMidlet.firstlot_no++;if (HorseMidlet.firstlot_no > 7)HorseMidlet.firstlot_no = 0;}else {if (HorseMidlet.mytotalmoney >= HorseMidlet.BIT_LOT_MONEY) { HorseMidlet.firstlot_money += HorseMidlet.BIT_LOT_MONEY; HorseMidlet.mytotalmoney -= HorseMidlet.BIT_LOT_MONEY;}}}if (HorseMidlet.substate == 1) { //the second lotif (lot_select == 0) {HorseMidlet.secondlot_no++;if (HorseMidlet.secondlot_no == HorseMidlet.firstlot_no) HorseMidlet.secondlot_no++;if (HorseMidlet.secondlot_no > 7) {HorseMidlet.secondlot_no = 0;if (HorseMidlet.secondlot_no == HorseMidlet.firstlot_no) HorseMidlet.secondlot_no++;}else {if (HorseMidlet.mytotalmoney >= HorseMidlet.BIT_LOT_MONEY) { HorseMidlet.secondlot_money += HorseMidlet.BIT_LOT_MONEY; HorseMidlet.mytotalmoney -= HorseMidlet.BIT_LOT_MONEY;}}}}else if (HorseMidlet.gamestate==HorseMidlet.GAME_STATE_TRAINING) {HorseMidlet.substate=(HorseMidlet.substate+1)%4;}break;case DOWN:if (HorseMidlet.gamestate==HorseMidlet.GAME_STATE_START){HorseMidlet.substate++;if(HorseMidlet.substate>=3)HorseMidlet.substate=0;// repaint();}else if (HorseMidlet.gamestate==HorseMidlet.GAME_STATE_LOT){if(HorseMidlet.substate>=2){HorseMidlet.substate++;if(HorseMidlet.substate>4)HorseMidlet.substate=2;}else{if(lot_select==0)lot_select=1;lot_select=0;}}break;case LEFT:if (HorseMidlet.gamestate==HorseMidlet.GAME_STATE_LOT){if (HorseMidlet.substate == 0) { //the first lotif (lot_select == 0) {HorseMidlet.firstlot_no--;if (HorseMidlet.firstlot_no <0 )HorseMidlet.firstlot_no = 7;}else {if (HorseMidlet.firstlot_money > HorseMidlet.BIT_LOT_MONEY) { HorseMidlet.firstlot_money -= HorseMidlet.BIT_LOT_MONEY; HorseMidlet.mytotalmoney += HorseMidlet.BIT_LOT_MONEY;}}}if (HorseMidlet.substate == 1) { //the second lotif (lot_select == 0) {HorseMidlet.secondlot_no--;if (HorseMidlet.secondlot_no == HorseMidlet.firstlot_no) HorseMidlet.secondlot_no--;if (HorseMidlet.secondlot_no <0) {HorseMidlet.secondlot_no = 7;if (HorseMidlet.secondlot_no == HorseMidlet.firstlot_no) HorseMidlet.secondlot_no--;}}else {if (HorseMidlet.secondlot_money > HorseMidlet.BIT_LOT_MONEY)HorseMidlet.secondlot_money -= HorseMidlet.BIT_LOT_MONEY; HorseMidlet.mytotalmoney += HorseMidlet.BIT_LOT_MONEY;}}}}else if (HorseMidlet.gamestate==HorseMidlet.GAME_STATE_TRAINING) {HorseMidlet.substate=(HorseMidlet.substate+3)%4;}break;case UP:if (HorseMidlet.gamestate==HorseMidlet.GAME_STATE_START){HorseMidlet.substate--;if(HorseMidlet.substate<0)HorseMidlet.substate=2;}else if (HorseMidlet.gamestate==HorseMidlet.GAME_STATE_LOT){if(HorseMidlet.substate>=2){HorseMidlet.substate--;if(HorseMidlet.substate<2)HorseMidlet.substate=4;}else{if(lot_select==0)lot_select=1;elselot_select=0;}repaint();break;default:break;}repaint();}}package HorseClub;import javax.microedition.lcdui.*;public class RaceGround{private static int imageWidth, imageHeight;private static int tileWidth, tileHeight;private static int imageSkyWidth, imageSkyHeight;private static int tileSkyWidth, tileSkyHeight;private static int canvasWidth, canvasHeight;private Image[] images;private final String BACKGROUND_NAME="raceground";private final int BACKGROUND_FRAMES=1;private final String SKY_NAME="racesky";private final int SKY_FRAMES=1;private Image[] imgTile=new Image[BACKGROUND_FRAMES];private Image[] imgSkyTile=new Image[SKY_FRAMES];private static Image imgBackground;private static Image imgSky;private static int xBackground, yBackground,xSky;int yStart=30;int ySkyStart=0;public RaceGround(){// load the images from the .jarimgTile=getImages(BACKGROUND_NAME,BACKGROUND_FRAMES); imgSkyTile=getImages(SKY_NAME,SKY_FRAMES);// set the canvas measurements to local class variables.canvasWidth=(HorseCanvas.getCanvasWidth());canvasHeight=(HorseCanvas.getCanvasHeight());//prepare the background paras// all character frame images are assumed// to be the same height and widthtileWidth=imgTile[0].getWidth();tileHeight=imgTile[0].getHeight();// set the background image dimensionsimageWidth=((canvasWidth/tileWidth)*tileWidth)+(tileWidth*2);imageHeight=tileHeight;//((canvasWidth/tileHeight)*tileHeight)+tileHeight;//prepare the sky parastileSkyWidth=imgSkyTile[0].getWidth();tileSkyHeight=imgSkyTile[0].getHeight();// set the background image dimensionsimageSkyWidth=((canvasWidth/tileSkyWidth)*tileSkyWidth)+(tileSkyWidth*2); imageSkyHeight=tileSkyHeight;init();}public void init(){xBackground=0;yBackground=-tileHeight;xSky=0;ySkyStart=0;createImage();createSkyImage();setImage();}public Image getImage(){return imgBackground;}public Image getSkyImage(){return imgSky;}public void draw(Graphics g){g.drawImage(getImage(),xBackground,yStart,g.LEFT|g.TOP);g.drawImage(getSkyImage(),xSky,ySkyStart,g.LEFT|g.TOP);}public void setPosition(int offset){//move the background to provide animation of moving landscape. boolean reset=false;// if the image exceeds the x-axis then reset it// and set the starting point for the next row in the image array// set the redraw flag for redrawing the imagexBackground=xBackground-offset;if(xBackground<=-tileWidth){xBackground=0;reset=true;}xSky=xSky-1;if(xSky<=-tileSkyWidth){xSky=0;reset=true;}// if the images exceeds the y-axis then reset it// and set the stating point for the next column in the image array // set the redraw flag for redrawing the image//if(++yBackground==0)//{// yBackground=-tileHeight;// if(--xStart<0)// {// xStart=9;// }// reset=true;//}// redraw the background image if reset=trueif(reset){// setImage();}}private static void createImage(){// allocate memory to store the onscreen background image.// assuming all tiles are the same size, make the buffer// the screen size plus one row and column.imgBackground=Image.createImage(imageWidth, imageHeight);}private static void createSkyImage(){// allocate memory to store the onscreen background image.// assuming all tiles are the same size, make the buffer// the screen size plus one row and column.imgSky=Image.createImage(imageSkyWidth, imageSkyHeight);}public void setImage(){Graphics g = imgBackground.getGraphics();Graphics gSky = imgSky.getGraphics();int currentWidth=0;int currentHeight=(imageHeight-tileHeight);// draw the tiles within the bounds of the allocated image buffer// draw from the starting from the current position within the image array .while (currentHeight>=0){while (currentWidth{g.drawImage(imgTile[0],currentWidth,currentHeight,g.LEFT | g.TOP); currentWidth+=tileWidth;}currentWidth=0;currentHeight-=tileHeight;}//Title the SkycurrentWidth=0;currentHeight=(imageSkyHeight-tileSkyHeight);while (currentHeight>=0){while (currentWidth{gSky.drawImage(imgSkyTile[0],currentWidth,currentHeight,g.LEFT | g.TOP); currentWidth+=tileSkyWidth;}currentWidth=0;currentHeight-=tileSkyHeight;}}private Image[] getImages(String imgName, int frames){return HorseMidlet.getImages(imgName, frames);}}posted on 2007-04-02 10:46 圣域飞侠 阅读(615) 评论(0) 编辑 收藏。
java课程设计赛跑小游戏
java课程设计赛跑小游戏一、课程目标知识目标:1. 学生能掌握Java语言的基本语法和程序结构。
2. 学生能理解面向对象编程的基本概念,如类、对象、方法等。
3. 学生能运用所学知识设计和实现一个简单的赛跑小游戏。
技能目标:1. 学生能运用Java编程解决实际问题,提高编程实践能力。
2. 学生能通过编写代码,培养逻辑思维和问题分析能力。
3. 学生能运用调试工具进行程序调试,提高程序调试能力。
情感态度价值观目标:1. 学生培养对编程的兴趣,激发学习Java的热情。
2. 学生通过团队合作完成项目,培养团队协作和沟通能力。
3. 学生在游戏设计过程中,培养创新意识和审美观念。
课程性质:本课程为实践性课程,旨在让学生通过实际操作,掌握Java编程的基本知识和技能。
学生特点:学生具备一定的计算机操作基础,对编程有一定了解,但实际编程经验不足。
教学要求:注重理论与实践相结合,引导学生主动思考、动手实践,培养编程兴趣和实际操作能力。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. Java基本语法:变量、数据类型、运算符、控制结构(条件语句、循环语句)。
相关教材章节:第一章至第三章。
2. 面向对象编程基础:类与对象、构造方法、封装、继承、多态。
相关教材章节:第四章至第六章。
3. Java图形用户界面(GUI):Swing组件、事件处理。
相关教材章节:第七章。
4. 游戏设计:赛跑小游戏的需求分析、设计、实现。
相关教材章节:第八章。
教学进度安排:1. 第一周:回顾Java基本语法,讲解面向对象编程基础。
2. 第二周:学习Java图形用户界面,进行游戏设计初步探讨。
3. 第三周:分组讨论,明确赛跑小游戏的需求和设计思路。
4. 第四周:编写代码,实现赛跑小游戏,并进行调试和优化。
5. 第五周:展示作品,进行评价和总结。
教学内容确保科学性和系统性,结合教材章节和课程目标,注重理论与实践相结合,以培养学生的编程能力和实际操作技能。
Java课程设计报告-超级马里奥游戏的设计与开发
超级马里奥游戏的设计与开发目录1.课程设计要求.................................................. - 2 -1.1课设题目................................................. - 2 -1.2课设目的................................................. - 2 -1.3开发环境................................................. - 2 -1.4课设内容................................................. - 2 -1.4.1游戏介绍........................................... - 2 -1.4.2开发流程........................................... - 4 -2.设计过程...................................................... - 5 -2.1总体设计................................................. - 5 -2.1.1所用类的设计....................................... - 5 -2.1.2功能设计........................................... - 5 -2.2详细设计................................................. - 5 -2.2.1窗体的设计......................................... - 6 -2.2.2游戏场景的开发..................................... - 6 -2.2.3障碍物的开发....................................... - 6 -2.2.4将障碍物添加到场景中去............................. - 7 -2.2.5马里奥的开发....................................... - 7 -2.2.6将马里奥对象加入到窗体中........................... - 8 -2.2.7将马里奥与障碍物进行设置........................... - 8 -2.2.8敌人的开发......................................... - 9 -2.2.9敌人放到场景中..................................... - 9 -2.2.10其他游戏相关..................................... - 10 -3.具体实现..................................................... - 10 -3.1窗体类.................................................. - 10 -3.2马里奥类................................................ - 11 -3.3场景类.................................................. - 14 -3.4障碍物类................................................ - 15 -3.5敌人类.................................................. - 15 -4.调试过程..................................................... - 17 -4.1系统测试................................................ - 17 -4.2出现的问题和解决的方法.................................. - 19 -5.小结......................................................... - 20 -6.参考资料..................................................... - 20 -1.课程设计要求1.1课设题目超级马里奥游戏的设计与开发1.2课设目的《Java程序设计》课程是网络工程专业的一门专业必修课程,特针课程进行为期两周的实践教学,旨在提升本专业学生对此课程中的理论知识的综合应用能力、提高学生的逻辑思维能力、软件开发能力。
赛马游戏编程实现
赛马游戏编程实现赛马游戏是一种模拟竞速体育比赛的电子游戏,玩家可以通过控制角色或者直接操作游戏中的赛马来参与比赛。
利用编程技术实现赛马游戏的开发不仅可以提升玩家的技术能力,还能够增添游戏的趣味性。
本文将介绍如何通过编程来实现一个赛马游戏。
一、游戏背景与设定在开始编程实现赛马游戏之前,我们需要先确定游戏的背景和设定。
1. 赛道设定:赛道是赛马游戏中最关键的元素之一。
我们可以选择在屏幕上绘制一个包含多个赛道的竞速场地,每个赛道上都有一匹赛马在进行比赛。
2. 赛马选择:玩家可以选择不同的赛马来进行比赛。
每匹赛马都有不同的速度和耐力属性,这会影响它们在比赛中的表现。
3. 比赛规则:我们需要确定游戏的比赛规则。
比如,比赛的长度、比赛的胜利条件等。
通常情况下,第一名通过终点线的赛马将获得比赛的胜利。
二、游戏功能的实现在确定游戏的背景和设定之后,我们需要开始实现游戏的各项功能。
1. 赛道绘制:使用编程语言提供的图形库或者游戏引擎,我们可以绘制出游戏中的赛道场景。
可以利用图形库提供的函数来绘制赛道。
比如,在屏幕上绘制多个平行的直线,每条直线代表一个赛道。
2. 赛马控制:玩家可以通过键盘或者鼠标操作来控制赛马的移动。
通过编程来监听键盘或者鼠标事件,我们可以实现对赛马的控制功能。
当玩家按下相应的按键或者进行鼠标点击时,赛马将作出相应的移动动作。
3. 赛马属性:为每匹赛马设定速度和耐力属性。
通过设定不同的属性值,我们可以实现赛马在比赛中的表现差异。
比如,速度属性高的赛马移动速度较快,耐力属性高的赛马可以在比赛中持久地保持高速。
4. 比赛逻辑:编写游戏逻辑代码来判断比赛的胜负。
每一帧(frame),比较所有赛马的当前位置,判断哪匹赛马先达到终点线,并相应地进行胜负的判定。
5. 游戏界面:编程实现游戏的界面显示。
可以在屏幕上显示比赛的相关信息,如比赛进行的时间、每匹赛马的位置等。
可以使用图形库提供的函数来绘制这些界面元素。
田忌赛马算法java
package Test1;import java.util.Scanner;public class LOLTest<AnyType> {/*** @param args*/Node firstNode=new Node(0);Node secondNode=new Node(0);int sizeA=1;int sizeB=1;public int getSizeA() {return sizeA;}public int getSizeB() {return sizeB;}public static void main(String[] args) {// TODO Auto-generated method stubScanner reader = new Scanner(System.in);int T = reader.nextInt();for (int i = 0; i < T; i++) {int m = reader.nextInt();LOLTest test = new LOLTest();double[] a = new double[m];double[] b = new double[m];for (int j = 0; j < m; j++) {a[j] = reader.nextDouble();}for (int j = 0; j < m; j++) {b[j] = reader.nextDouble();}test.sort(a);test.sort(b);test.create1(test.firstNode, a);test.create2(test.secondNode, b);int sum = test.abcd();if (sum >= 0) {System.out.println("Xiaoming will get " + sum + "QB");} else {System.out.println("Xiaotao will get " + Math.abs(sum) + "QB");}}}// 计算sum并返回public <AnyType extends Comparable<? super AnyType>> int abcd() {int sum = 0;while (firstNode.next!=null) {Node p=firstNode.next;Node q=secondNode.next;if (p.data > q.data) {sum=sum+200;remove1(1);remove2(1);}if (p.data == q.data) {Node c=getNode(getSizeA(),firstNode);Node d=getNode(getSizeB(),secondNode);if(c.data<=d.data&&c.data!=p.data){remove1(1);remove2(getSizeB()-1);sum=sum-200;}else if(c.data>d.data){remove1(getSizeA()-1);remove2(getSizeB()-1);sum=sum+200;}else if(c.data==d.data&&c.data==p.data){remove1(getSizeA()-1);remove2(getSizeA()-1);}}if (p.data < q.data) {sum=sum-200;remove1(1);remove2(getSizeB()-1);}}return sum;}//获得idx位置的节点public Node getNode(int idx,Node node){Node p=node;for(int i=0;i<idx-1;i++){p=p.next;}return p;}// 删除单链表中的元素public void remove1(int idx){Node p=firstNode;for(int i=0;i<idx-1;i++){p=p.next;}Node node=p.next.next;p.next=node;sizeA--;}public void remove2(int idx){Node p=secondNode;for(int i=0;i<idx-1;i++){p=p.next;}Node node=p.next.next;p.next=node;sizeB--;}// 对数组进行构造单链表public void create1(Node node, double[] a) { Node p = node;for (int i = 0; i < a.length; i++) {p.next = new Node(a[i]);p = p.next;sizeA++;}}public void create2(Node node, double[] a) { Node p = node;for (int i = 0; i < a.length; i++) {p.next = new Node(a[i]);p = p.next;sizeB++;}}// 对输入的数组进行排序public void sort(double[] a) {for (int i = 0; i < a.length; i++) {for (int j = i; j < a.length - 1; j++) {if (a[j + 1] < a[i]) {double c = a[j + 1];a[j + 1] = a[i];a[i] = c;}}}}// 节点类private static class Node {double data;Node next;Node() {}Node(double date) {this.data = date;this.next = null;}public Node(double d, Node n) {this.data = d;this.next = n;}}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录一.需求分析................................... 错误!未定义书签。
概述 (2)课题分析 (2)实现功能步骤................................. 错误!未定义书签。
设计工作详解................................. 错误!未定义书签。
外部界面需求................................. 错误!未定义书签。
;运行环境...................................................错误!未定义书签。
二.概要设计................................... 错误!未定义书签。
系统流程图................................... 错误!未定义书签。
功能模块图................................... 错误!未定义书签。
赛马比赛模拟程序初始化块 (4)赛马比赛区模块 (4)投注区模块 (5)线程启动及结束模块 (5)>比赛结果显示区模块 (5)三.详细设计................................... 错误!未定义书签。
赛马比赛模拟程序初始化模块 (6)赛马比赛区模块 (7)错误!未定义书签。
投注区模块错误!未定义书签。
线程启动及结束模块9比赛结果显示区模块.........................................12错误!未定义书签。
程序流程...................................................12错误!未定义书签。
~系统界面...................................................错误!未定义书签。
四.调试分析 (13)调试过程中所遇到的问题及解决方法............. 错误!未定义书签。
经验与体会................................... 错误!未定义书签。
五.用户使用说明............................... 错误!未定义书签。
六.测试结果................................... 错误!未定义书签。
七.参考文献................................... 错误!未定义书签。
八.附录....................................... 错误!未定义书签。
$一、需求分析概述)Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。
本次使用的是eclipse 开发软件。
以下就给出这次课题设计的题目:模拟赛马比赛。
课题分析a.课设题目:模拟赛马比赛内容:1.设计一个模拟赛马比赛软件,比赛显示赛马过程,每匹马每个时刻的加速度都是随机的。
2.能统计每匹马所跑完所需的总时间,最终的名次。
3.[4.支持用户对马进行投注,并记录输赢,保存到文件或数据库中。
b.从这个题目来分析,要做的主要有四大点:1.第一点就是要设计用户登录赛马的页面,登陆后才能进行赛马和投注等功能。
2.第二点就是要能在页面上进行投注和赛马。
其中包括:(1)用户进行选马,和对选中的马进行有效的投注。
(2)开始赛马,期间用户不得进行其他操作。
(3)赛马结束,显示比赛输赢和投注金额的变化。
3.第三点就是用户能进行重新比赛等操作。
实现功能步骤程序开始后,会进入用户登录界面,用户输入自己的姓名和密码后,选择登录会进入到赛马比赛的界面,这时可以看见赛马场和马匹的编号,用户可以选择任何一个编号的马进行投注,输入有效的投注金额(因为系统设置了初始金额,所以不得投注的超过初始金额)。
投注完成后用户可以选择开始比赛,赛马期间用户不得进行任何操作,赛马结束后,用户可以重新进行新一轮的赛马比赛,方法上同。
设计工作详解通过这个分析,我认为主要是通过线程来实现马的运动,thread的子类创建线程,线程的开始使马进行运动,再通过线程的休眠,随机获得休眠时间使马获得随机的加速度,最后线程的终止使马停止运动。
期间还包括用Draw类以及各种repaint()等方法来绘制马匹。
外部界面需求本程序JFrame类其子类创建的对象是窗体,通过按钮JButton及标签组件JLabel来实现用户的登录界面。
赛马界面还运用到JPanel创建面板和FlowLayout 布局变量,区分赛马、投注、显示区域,还使用Draw类画马匹,来丰富整个赛马的界面。
运行环境/系统软件:Window 7所需文件:,,工具软件:Eclipse二.概要设计系统流程图] ! ~图 系统流程图.功能模块图< 赌 金 变 化@图 功能模块图赛马比赛模拟程序初始化模块在这一模块中,要求对赛马场、投注区及显示区的布局进行设置,初始化程序窗口的大小,并创建程序窗口。
赛马比赛区模块其中此模块包括对画出马匹和赛道部分,通过使用Draw类来向Jpanel面板中添加马和赛道。
部分代码:class Draw extends JPanel{\int x=0;String s;int w,h;public void paint(Graphics g){(g);;w=();!h=();;(66,h/2-44,666,h/2-44);(66,h/2+40,666,h/2+40);;(66,0,66,h);;(666,0,666,h);;(36+x,h/2-10,30,20);投注金额模块TextField来输入投注金额,tfget接收后与总金额进行比较。
c. 赌金变化模块同时变量tz控制金额改变。
线程启动及结束模块a. 线程启动及结束部分模块使用 racing().start()启动线程,马匹开始运动。
b. 获取比赛初始系统时间模块~线程run启动时,通过使用Calendar类来获取比赛开始时的系统时间,其中使用getNow_HMS()方法来获取比赛的初始时间。
c. 获取比赛结束系统时间模块当比赛结束,线程终止时,通过使用Calendar类来获取比赛结束时的系统时间,其中使用getNow_HMS()方法来获取比赛的结束时间。
比赛结果显示区模块在JTextArea()分布的空间内,通过方法append()显示马匹的名次,用时等信息。
三.详细设计赛马比赛模拟程序初始化模块在这一模块中,要求对赛马场、投注区及显示区的布局进行设置。
)模块代码:public Run(){frame=new JFrame("赛马");p1=new JPanel();p2=new JPanel();p3=new JPanel();ly=new FlowLayout();;jb=new JButton("开始");h1=new Draw();h2=new Draw();h3=new Draw();h4=new Draw();no=0;tz=20000;cotrol=true;="1号马";="2号马";="3号马";="4号马";b1=new JRadioButton("1号马");b2=new JRadioButton("2号马");b3=new JRadioButton("3号马");b4=new JRadioButton("4号马");{bg=new ButtonGroup();money=new JLabel("总金额为"+(tz));tf=new TextField(10);ta=new JTextArea("",5,10);tart();new racing(h2,this).start();new racing(h3,this).start();new racing(h4,this).start();~("重新开始");线程启动及结束部分模块模块代码:public void actionPerformed(ActionEvent e){……("比赛开始了"+'\n');new racing(h1,this).start();new racing(h2,this).start();'new racing(h3,this).start();new racing(h4,this).start();("重新开始");获取比赛初始系统时间模块线程run启动时,通过使用Calendar类来获取比赛开始时的系统时间,其中使用getNow_HMS()方法来获取比赛的初始时间。
模块代码:import .*;public class DateUtil{public static String getNow_M(){~Calendar c=();String minute=);if()==1){minute="0"+minute;}String ms1=minute;return ms1;}>public static String getNow_S(){Calendar c=();String second=);if()==1){second="0"+second;}String ms2=second;return ms2;`}public int getNow_HMS(){String s1,s2;s1=getNow_M();s2=getNow_S();int a=(s1)*60+(s2);return a;}(public static void main(String[] args) {DateUtil d;d=new DateUtil();();}}public int Time(){int oo=();]return oo;}c. 获取比赛结束系统时间模块当比赛结束,线程终止时,通过使用Calendar类来获取比赛结束时的系统时间,其中使用getNow_HMS()方法来获取比赛的结束时间。
模块代码:public void run(){ int t;int o,y;)o=();……y=();int z=y-o;("用时:"+z+"秒"+'\n');}比赛结果显示区模块在JTextArea()分布的空间内,通过方法append()显示马匹的名次,用时等信息。