java课程设计创意小游戏
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java课程设计创意小游戏相关的知识,希望对你有一定的参考价值。
参考技术A ① 求Java课程设计—小游戏(含源代码)//hi./srxboys/item/8ce4743da1adc991c2cf29c4
Tank——坦克大战(简洁版)源代码-------(此文档是自己在韩顺平教程总结而来)
*功能:1.防止敌人的坦克重叠运动
*(决定把判断是否碰撞的函数写到EnemyTank类)
*2.可以分关
*2.1(做一个开始的Panel,它是一个空的)
*2.2开始字体闪烁
*3.可以在玩游戏的时候,暂停和继续
*3.1当用户点击暂停时,子弹的速度和坦克速度设为0,并让坦克的方向
*不要发生变化。
*4.可以记录玩家的成绩
*4.1用文件流的方式(小游戏)[大游戏是用的数据库<cs,bs>结构,三国]
*4.2单写一个记录类,完成对玩家的记录
*4.3先完成保存共击毁了多少辆敌人坦克的功能
*4.4存盘退出游戏,可以记录当时的敌人的坦克坐标,并可以恢复
*5.java如何操作声音文件
*/
② JAVA课程设计,求个能用eclipse实现小游戏或小程序的源代码。感激不尽
你自己来去下自载吧,这里面都有 //oschina/project/java
③ 用JAVA编写一个小游戏
前天写的猜数字游戏,yongi控制猜测次数,有详细解析,用黑窗口可以直接运行,
我试验过了,没问题
import javax.swing.Icon;
import javax.swing.JOptionPane;
public class CaiShuZi4JOptionPane
/**
* @param args
*/
public static void main(String[] args)
Icon icon = null;
boolean bl = false;
int put = 0;
int c = (int) (((Math.random())*100)+1); //获取一个1-100的随机数
System.out.println("你获取的随机数是:"+c); //打印你的随机数字
String str1 = (String) JOptionPane.showInputDialog(null,"请输入你的猜测数字(1-100): ","猜数字游戏",JOptionPane.PLAIN_MESSAGE,icon,null,"在这输入"); //第一次输入你的猜测数字
if(str1==null)
JOptionPane.showMessageDialog(null, "你已经取消了本次游戏"); //如果你点取消那么本次游戏结束
else
bl = num(str1); //判断是输入的是不是数字或者是整数
if(true==bl) //如果是数字的话进入与随机数比较的程序
System.out.println("你输入的数字是:"+str1); //打印你输入的数字
put = Integer.valueOf(str1);
for(int i = 4;i > 0;i--) //i是你可以猜测的次数
if(put==c)
JOptionPane.showMessageDialog(null, "恭喜你猜对了,正确答案是:"+c+"。"); //如果你猜对了就直接结束循环
break;
else if(put>c) //如果输大了就让你再次从新输入
str1 = (String) JOptionPane.showInputDialog(null,"你的输入过大。你还有"+i+"次机会,请重新输入: ","猜数字游戏",JOptionPane.PLAIN_MESSAGE,icon,null,"在这输入");
if(str1==null)
JOptionPane.showMessageDialog(null, "你已经取消了本次输入");
break;
else
bl =num(str1);
if(true==bl)
put = Integer.valueOf(str1);
else
JOptionPane.showMessageDialog(null, "你的输入不正确,请重新输入");
else if(put<c) //如果你输小了也让你从新输入
str1 = (String) JOptionPane.showInputDialog(null,"你的输入过小。你还有"+i+"次机会,请重新输入: ","猜数字游戏",JOptionPane.PLAIN_MESSAGE,icon,null,"在这输入");
if(str1==null)
JOptionPane.showMessageDialog(null, "你已经取消了本次输入");
break;
else
bl =num(str1);
if(true==bl)
put = Integer.valueOf(str1);
else
JOptionPane.showMessageDialog(null, "你的输入不正确,请重新输入");
else if(bl==false) //这个 是你第一次如果填写的不是数字的话也会结束本次游戏
JOptionPane.showMessageDialog(null, "请您下次按要求填写。本次游戏结束");
if(true==bl && c!=put) //如果你i次都没猜对,那么就直接告诉你这个数十什么
JOptionPane.showMessageDialog(null, "很遗憾你没能猜对,这个数字是:"+c+".");
public static boolean num(String value) //一个静态方法,判断你输入的是不是数字
try
Integer.parseInt(value);
return true;
catch (Exception e)
return false;
④ 用java制作一个小游戏 教学
static Scanner in =new Scanner(System.in);
public static int aaa()
int c = 0;
while(true)
try
if(c>999&&c<10000)
break;
else
// System.out.println("请输入4位整数");
c= in.nextInt();
if(c>999&&c<10000)
break;
else
System.out.println("输入有误,请重新输入4位整数");
catch (Exception e)
System.out.println("请输入整数");
c= in.nextInt();
//in.close();
return c;
public static void cai()
//Scanner sa =new Scanner(System.in);
int haoma=(int)(Math.random()*10000);
if(haoma<999)
haoma = Integer.parseInt(String.valueOf(haoma)+"0");
System.out.println(haoma);
System.out.println("请输入一位4位整数");
int aa = 0;
while(true)
aa= aaa();
String pd=String.valueOf(aa);
if(pd.length()!=4)
aa = aaa();
else
break;
while(true)
if(aa==haoma)
System.out.println("你猜对了,可以去买彩票了");
else
System.out.println("抱歉 , 你猜错了");
System.out.println("是否继续1继续 其他结束");
try
int ss = in.nextInt();
if(ss==1)
cai();
else
break;
catch (Exception e)
in.close();
break;
public static void main(String[] args)
System.out.println("欢迎来到猜号小游戏");
cai();
System.out.println("over");
⑤ 想做一个java小游戏 谁能给几个创意啊 注意 是创意!!!!! 不是已有的有创意的小游戏
比如有东西扔过来,选择吃掉或者躲开,考反应吧。
⑥ 急求java课程设计,内容可以是小游戏的,如(迷宫,计算器,停车场之恋的),要能运行,谢谢
俄罗斯方块,贪吃蛇。推箱子。
⑦ 求JAVA期末课程设计,要那种开发的小项目软件。可以是像记事本那种,也可以是小游戏那种。
网上搜不到的一般是不可共享的资源,建议去图书馆找本专门针对课程设计的书,里面的资料很丰富,你可以照着做一下,并作功能上适当的增减,这样网上就很难找到了
《游戏学习》JAVA版坦克大战课程设计及源码
1.功能设计
- 游戏要有图形用户界面,界面能够反映游戏所有的细节。
- 界面中要有坦克,墙,树林,河流。
- 界面中要有一个“家”,“家”被攻击中则输了游戏。
- 坦克分两种,敌方和我方。
- 墙也分为两种,可以穿透的普通墙,不可以穿透的铁墙。
- 树和河流均只有一种,树林坦克可以通过。
- 坦克可以发射子弹,敌我方的子弹属性一样。
- 我方子弹可以杀死敌方坦克,敌方子弹也可以杀死我方坦克,但需要多枪子弹才可以杀死。
- 敌方之间不可以杀死对方。
- 子弹击中坦克要有爆炸,但击中墙不能爆炸。
- 我方可以吃血包增加生命。
- 游戏可以暂停,重新开始,游戏帮助等功能。具体如下图:
2.需求分析
- 设计一个图形用户界面,将所有游戏的元素都能在此用于界面上表现出来,界面能够接受用户的操作,具有人机交互功能。用户可以选择重新开始游戏,退出游戏,暂停游戏和查找游戏帮助。
- 界面中包含坦克,树,河流,阻挡墙和游戏用户所要保护的“家”。
- 坦克:坦克分为两种,敌方坦克和用户控制的坦克。用户方和敌方坦克均可以发射子弹,可以改变路径的行走,且在行走过程中遇到墙等阻碍物和游戏边界时要改变方向,而不能一直顶着障碍物不放。坦克之间不能穿越,碰撞到后自动调换方向。
- 树:界面中要包括树林,作为遮掩物体和修饰物体,以便增加游戏的元素,使得游戏更加贴切人性化。树的数目不限,以游戏整体界面清晰美观来决定数目。
- 河流:界面中要包括河流,河流作用与树林相同,同样河流的数目不限,以游戏界面整体美观度来决定数目。
- 墙:墙体分为两种,普通的墙和铁墙,普通的墙在受到子弹袭击时会损坏,而铁墙可以阻碍子弹的穿越。两方的坦克均不能穿越两种墙体,但都可以摧毁普通墙体。普通墙体的数目配合其他元素合理安排,铁墙则不宜过多,不然游戏难度太低甚至因为坦克不能穿越铁墙而使得游戏无法进行下去。
- “家”:用户方除了有一辆自己的坦克外还有一个要保护的家,家由普通墙体包围,家受到子弹攻击后游戏立即结束,用户方则输了本局游戏。
- 子弹:子弹可以由敌方和用户方发射,且发射出去的子弹可以直线移动,直到碰到障碍物就消失,子弹可以穿越树林和河流。敌方坦克受到一颗子弹攻击会爆炸从而导致死亡,死亡后坦克消失。用户方受到子弹攻击后会减少寿命,且受到四次攻击则死亡,此时如还有敌方坦克存在,则用户方输掉本次游戏。
- 爆炸:当子弹射击到坦克身上时,要产生爆炸效果。
- 方向:坦克和子弹都有方向,可以选择上下左右四个方向,且子弹的方向从属于坦克的方向。
3.项目代码结构目录
4.关键代码展示
启动类 TankClient
import java.util.ArrayList;
import java.awt.*;
import java.awt.event.*;
import java.util.List;
import javax.swing.JOptionPane;
public class TankClient extends Frame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
public static final int Fram_width = 800; // 静态全局窗口大小
public static final int Fram_length = 600;
public static boolean printable = true;
MenuBar jmb = null;
Menu jm1 = null, jm2 = null, jm3 = null, jm4 = null;
MenuItem jmi1 = null, jmi2 = null, jmi3 = null, jmi4 = null, jmi5 = null,
jmi6 = null, jmi7 = null, jmi8 = null, jmi9 = null;
Image screenImage = null;
Tank homeTank = new Tank(300, 560, true, Direction.STOP, this);// 实例化坦克
GetBlood blood = new GetBlood(); // 实例化生命
Home home = new Home(373, 545, this);// 实例化home
List<River> theRiver = new ArrayList<River>();
List<Tank> tanks = new ArrayList<Tank>();
List<BombTank> bombTanks = new ArrayList<BombTank>();
List<Bullets> bullets = new ArrayList<Bullets>();
List<Tree> trees = new ArrayList<Tree>();
List<CommonWall> homeWall = new ArrayList<CommonWall>(); // 实例化对象容器
List<CommonWall> otherWall = new ArrayList<CommonWall>();
List<MetalWall> metalWall = new ArrayList<MetalWall>();
public void update(Graphics g) {
screenImage = this.createImage(Fram_width, Fram_length);
Graphics gps = screenImage.getGraphics();
Color c = gps.getColor();
gps.setColor(Color.GRAY);
gps.fillRect(0, 0, Fram_width, Fram_length);
gps.setColor(c);
framPaint(gps);
g.drawImage(screenImage, 0, 0, null);
}
public void framPaint(Graphics g) {
Color c = g.getColor();
g.setColor(Color.green); // 设置字体显示属性
Font f1 = g.getFont();
g.setFont(new Font("TimesRoman", Font.BOLD, 20));
g.drawString("区域内还有敌方坦克: ", 200, 70);
g.setFont(new Font("TimesRoman", Font.ITALIC, 30));
g.drawString("" + tanks.size(), 400, 70);
g.setFont(new Font("TimesRoman", Font.BOLD, 20));
g.drawString("剩余生命值: ", 500, 70);
g.setFont(new Font("TimesRoman", Font.ITALIC, 30));
g.drawString("" + homeTank.getLife(), 650, 70);
g.setFont(f1);
if (tanks.size() == 0 && home.isLive() && homeTank.isLive()) {
Font f = g.getFont();
g.setFont(new Font("TimesRoman", Font.BOLD, 60)); // 判断是否赢得比赛
this.otherWall.clear();
g.drawString("你赢了! ", 310, 300);
g.setFont(f);
}
if (homeTank.isLive() == false) {
Font f = g.getFont();
g.setFont(new Font("TimesRoman", Font.BOLD, 40));
tanks.clear();
bullets.clear();
g.setFont(f);
}
g.setColor(c);
for (int i = 0; i < theRiver.size(); i++) { // 画出河流
River r = theRiver.get(i);
r.draw(g);
}
for (int i = 0; i < theRiver.size(); i++) {
River r = theRiver.get(i);
homeTank.collideRiver(r);
r.draw(g);
}
home.draw(g); // 画出home
homeTank.draw(g);// 画出自己家的坦克
homeTank.eat(blood);// 充满血--生命值
for (int i = 0; i < bullets.size(); i++) { // 对每一个子弹
Bullets m = bullets.get(i);
m.hitTanks(tanks); // 每一个子弹打到坦克上
m.hitTank(homeTank); // 每一个子弹打到自己家的坦克上时
m.hitHome(); // 每一个子弹打到家里是
for (int j = 0; j < metalWall.size(); j++) { // 每一个子弹打到金属墙上
MetalWall mw = metalWall.get(j);
m.hitWall(mw);
}
for (int j = 0; j < otherWall.size(); j++) {// 每一个子弹打到其他墙上
CommonWall w = otherWall.get(j);
m.hitWall(w);
}
for (int j = 0; j < homeWall.size(); j++) {// 每一个子弹打到家的墙上
CommonWall cw = homeWall.get(j);
m.hitWall(cw);
}
m.draw(g); // 画出效果图
}
for (int i = 0; i < tanks.size(); i++) {
Tank t = tanks.get(i); // 获得键值对的键
for (int j = 0; j < homeWall.size(); j++) {
CommonWall cw = homeWall.get(j);
t.collideWithWall(cw); // 每一个坦克撞到家里的墙时
cw.draw(g);
}
for (int j = 0; j < otherWall.size(); j++) { // 每一个坦克撞到家以外的墙
CommonWall cw = otherWall.get(j);
t.collideWithWall(cw);
cw.draw(g);
}
for (int j = 0; j < metalWall.size(); j++) { // 每一个坦克撞到金属墙
MetalWall mw = metalWall.get(j);
t.collideWithWall(mw);
mw.draw(g);
}
for (int j = 0; j < theRiver.size(); j++) {
River r = theRiver.get(j); // 每一个坦克撞到河流时
t.collideRiver(r);
r.draw(g);
// t.draw(g);
}
t.collideWithTanks(tanks); // 撞到自己的人
t.collideHome(home);
t.draw(g);
}
blood.draw(g);
for (int i = 0; i < trees.size(); i++) { // 画出trees
Tree tr = trees.get(i);
tr.draw(g);
}
for (int i = 0; i < bombTanks.size(); i++) { // 画出爆炸效果
BombTank bt = bombTanks.get(i);
bt.draw(g);
}
for (int i = 0; i < otherWall.size(); i++) { // 画出otherWall
CommonWall cw = otherWall.get(i);
cw.draw(g);
}
for (int i = 0; i < metalWall.size(); i++) { // 画出metalWall
MetalWall mw = metalWall.get(i);
mw.draw(g);
}
homeTank.collideWithTanks(tanks);
homeTank.collideHome(home);
for (int i = 0; i < metalWall.size(); i++) {// 撞到金属墙
MetalWall w = metalWall.get(i);
homeTank.collideWithWall(w);
w.draw(g);
}
for (int i = 0; i < otherWall.size(); i++) {
CommonWall cw = otherWall.get(i);
homeTank.collideWithWall(cw);
cw.draw(g);
}
for (int i = 0; i < homeWall.size(); i++) { // 家里的坦克撞到自己家
CommonWall w = homeWall.get(i);
homeTank.collideWithWall(w);
w.draw(g);
}
}
public TankClient() {
// printable = false;
// 创建菜单及菜单选项
jmb = new MenuBar();
jm1 = new Menu("游戏");
jm2 = new Menu("暂停/继续");
jm3 = new Menu("帮助");
jm4 = new Menu("游戏级别");
jm1.setFont(new Font("TimesRoman", Font.BOLD, 15));// 设置菜单显示的字体
jm2.setFont(new Font("TimesRoman", Font.BOLD, 15));// 设置菜单显示的字体
jm3.setFont(new Font("TimesRoman", Font.BOLD, 15));// 设置菜单显示的字体
jm4.setFont(new Font("TimesRoman", Font.BOLD, 15));// 设置菜单显示的字体
jmi1 = new MenuItem("开始新游戏");
jmi2 = new MenuItem("退出");
jmi3 = new MenuItem("暂停");
jmi4 = new MenuItem("继续");
jmi5 = new MenuItem("游戏说明");
jmi6 = new MenuItem("级别1");
jmi7 = new MenuItem("级别2");
jmi8 = new MenuItem("级别3");
jmi9 = new MenuItem("级别4");
jmi1.setFont(new Font("TimesRoman", Font.BOLD, 15));
jmi2.setFont(new Font("TimesRoman", Font.BOLD, 15));
jmi3.setFont(new Font("TimesRoman", Font.BOLD, 15));
jmi4.setFont(new Font("TimesRoman", Font.BOLD, 15));
jmi5.setFont(new Font("TimesRoman", Font.BOLD, 15));
jm1.add(jmi1);
jm1.add(jmi2);
jm2.add(jmi3);
jm2.add(jmi4);
jm3.add(jmi5);
jm4.add(jmi6);
jm4.add(jmi7);
jm4.add(jmi8);
jm4.add(jmi9);
jmb.add(jm1);
jmb.add(jm2);
jmb.add(jm4);
jmb.add(jm3);
jmi1.addActionListener(this);
jmi1.setActionCommand("NewGame");
jmi2.addActionListener(this);
jmi2.setActionCommand("Exit");
jmi3.addActionListener(this);
jmi3.setActionCommand("Stop");
jmi4.addActionListener(this);
jmi4.setActionCommand("Continue");
jmi5.addActionListener(this);
jmi5.setActionCommand("help");
jmi6.addActionListener(this);
jmi6.setActionCommand("level1");
jmi7.addActionListener(this);
jmi7.setActionCommand("level2");
jmi8.addActionListener(this);
jmi8.setActionCommand("level3");
jmi9.addActionListener(this);
jmi9.setActionCommand("level4");
this.setMenuBar(jmb);// 菜单Bar放到JFrame上
this.setVisible(true);
for (int i = 0; i < 10; i++) { // 家的格局
if (i < 4)
homeWall.add(new CommonWall(350, 580 - 21 * i, this));
else if (i < 7)
homeWall.add(new CommonWall(372 + 22 * (i - 4), 517, this));
else
homeWall.add(new CommonWall(416, 538 + (i - 7) * 21, this));
}
for (int i = 0; i < 32; i++) {
if (i < 16) {
otherWall.add(new CommonWall(220 + 20 * i, 300, this)); // 普通墙布局
otherWall.add(new CommonWall(500 + 20 * i, 180, this));
otherWall.add(new CommonWall(200, 400 + 20 * i, this));
otherWall.add(new CommonWall(500, 400 + 20 * i, this));
} else if (i < 32) {
otherWall.add(new CommonWall(220 + 20 * (i - 16), 320, this));
otherWall.add(new CommonWall(500 + 20 * (i - 16), 220, this));
otherWall.add(new CommonWall(220, 400 + 20 * (i - 16), this));
otherWall.add(new CommonWall(520, 400 + 20 * (i - 16), this));
}
}
for (int i = 0; i < 20; i++) { // 金属墙布局
if (i < 10) {
metalWall.add(new MetalWall(140 + 30 * i, 150, this));
metalWall.add(new MetalWall(600, 400 + 20 * (i), this));
} else if (i < 20)
metalWall.add(new MetalWall(140 + 30 * (i - 10), 180, this));
else
metalWall.add(new MetalWall(500 + 30 * (i - 10), 160, this));
}
for (int i = 0; i < 4; i++) { // 树的布局
if (i < 4) {
trees.add(new Tree(0 + 30 * i, 360, this));
trees.add(new Tree(220 + 30 * i, 360, this));
trees.add(new Tree(440 + 30 * i, 360, this));
trees.add(new Tree(660 + 30 * i, 360, this));
}
}
theRiver.add(new River(85, 100, this));
for (int i = 0; i < 20; i++) { // 初始化20辆坦克
if (i < 9) // 设置坦克出现的位置
tanks.add(new Tank(150 + 70 * i, 40, false, Direction.D, this));
else if (i < 15)
tanks.add(new Tank(700, 140 + 50 * (i - 6), false, Direction.D,
this));
else
tanks
.add(new Tank(10, 50 * (i - 12), false, Direction.D,
this));
}
this.setSize(Fram_width, Fram_length); // 设置界面大小
this.setLocation(280, 50); // 设置界面出现的位置
this.setTitle("坦克大战——(重新开始:R键 开火:F键) ");
this.addWindowListener(new WindowAdapter() { // 窗口监听关闭
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.setResizable(false);
this.setBackground(Color.GREEN);
this.setVisible(true);
this.addKeyListener(new KeyMonitor());// 键盘监听
new Thread(new PaintThread()).start(); // 线程启动
}
public static void main(String[] args) {
new TankClient(); // 实例化
}
private class PaintThread implements Runnable {
public void run() {
// TODO Auto-generated method stub
while (printable) {
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
private class KeyMonitor extends KeyAdapter {
public void keyReleased(KeyEvent e) { // 监听键盘释放
homeTank.keyReleased(e);
}
public void keyPressed(KeyEvent e) { // 监听键盘按下
homeTank.keyPressed(e);
}
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("NewGame")) {
printable = false;
Object[] options = { "确定", "取消" };
int response = JOptionPane.showOptionDialog(this, "您确认要开始新游戏!", "",
JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE, null,
options, options[0]);
if (response == 0) {
printable = true;
this.dispose();
new TankClient();
} else {
printable = true;
new Thread(new PaintThread()).start(); // 线程启动
}
} else if (e.getActionCommand().endsWith("Stop")) {
printable = false;
// try {
// Thread.sleep(10000);
//
// } catch (InterruptedException e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
} else if (e.getActionCommand().equals("Continue")) {
if (!printable) {
printable = true;
new Thread(new PaintThread()).start(); // 线程启动
}
// System.out.println("继续");
} else if (e.getActionCommand().equals("Exit")) {
printable = false;
Object[] options = { "确定", "取消" };
int response = JOptionPane.showOptionDialog(this, "您确认要退出吗", "",
JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE, null,
options, options[0]);
if (response == 0) {
System.out.println("退出");
System.exit(0);
} else {
printable = true;
new Thread(new PaintThread()).start(); // 线程启动
}
} else if (e.getActionCommand().equals("help")) {
printable = false;
JOptionPane.showMessageDialog(null, "用→ ← ↑ ↓控制方向,F键盘发射,R重新开始!",
"提示!", JOptionPane.INFORMATION_MESSAGE);
this.setVisible(true);
printable = true;
new Thread(new PaintThread()).start(); // 线程启动
} else if (e.getActionCommand().equals("level1")) {
Tank.count = 12;
Tank.speedX = 6;
Tank.speedY = 6;
Bullets.speedX = 10;
Bullets.speedY = 10;
this.dispose();
new TankClient();
} else if (e.getActionCommand().equals("level2")) {
Tank.count = 12;
Tank.speedX = 10;
Tank.speedY = 10;
Bullets.speedX = 12;
Bullets.speedY = 12;
this.dispose();
new TankClient();
} else if (e.getActionCommand().equals("level3")) {
Tank.count = 20;
Tank.speedX = 14;
Tank.speedY = 14;
Bullets.speedX = 16;
Bullets.speedY = 16;
this.dispose();
new TankClient();
} else if (e.getActionCommand().equals("level4")) {
Tank.count = 20;
Tank.speedX = 16;
Tank.speedY = 16;
Bullets.speedX = 18;
Bullets.speedY = 18;
this.dispose();
new TankClient();
}
}
}
5. 游戏运行截图
坦克大战(Java版本)课程设计文档
https://download.csdn.net/download/weixin_40986713/21531925
坦克大战(Java版本)源码
以上是关于java课程设计创意小游戏的主要内容,如果未能解决你的问题,请参考以下文章