JAVA课程设计之赛马游戏

合集下载

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解答

⽥忌赛马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课程设计

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.可按“重新开始按钮”继续比赛:五、总结、心得与收获经过一个星期的奋斗,终于基本实现了该程序应由的功能,但这不意味着程序就完美无缺,例如程序界面不够美观,“重新比赛”后不能再次设置马匹的数量,也没有考虑到各种异常的产生。

赛马游戏程序

赛马游戏程序
2013-1-4
赛马游戏程序代码
•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的超级玛丽游戏的设计与实现论文

基于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赛马游戏

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课程设计-马匹赛跑

1.1界面及布局设计
在比赛的界面,使用的是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马匹的实现方法
写了一个马匹的类,用来封装马匹的属性。包括马匹的速度、坐标、是否存活、是否开始比赛、是否完成比赛等属性。每匹马的速度不是固定的,通过一个随机函数来实现马匹在整个过程中的动态速度。一开始马匹的坐标是固定的。初始化马匹是存活的,是开始准备比赛。通过这样的一个类来封装马匹的属性,更加便于我们管理。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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()显示马匹的名次,用时等信息。

相关文档
最新文档