设为首页 加入收藏

TOP

Java实现支持双黑两人激战的 坦克大战源码(经典游戏)(一)
2014-11-24 01:43:08 来源: 作者: 【 】 浏览:8
Tags:Java 实现 支持 双黑两 激战 坦克 大战 源码 经典游戏

写这个游戏已经有一段时间了,一直在实现各种新功能,从最开始的地图上只有坦克,发子弹还是一个大问题到现在可以两个人一起玩,还是花了不少心思的,现在坦克的速度更快,电脑坦克也不会撞墙.虽然游戏性没有经典坦克大战那么强,但是还是可以用来休闲娱乐一下,这个用了很多最近学到的新知识,模仿俄罗斯方块,还有一些小技巧,比如可以同时按触发多个按键事件,对子弹的处理等.
左边的坦克用W D S A控制移动,H发射子弹,每次最多出现5颗子弹,右边的坦克用上下左右箭头控制移动,L键发射子弹,互不干扰.Q键可以直接退出游戏,游戏结束后按Y键可以继续游戏.为了结构清晰游戏分为Mywar Shoot Tanks 3个类.



(第二次用插入代码,之前一直都不懂这功能,我奥特蛋了 (*^__^*) 嘻嘻……)
/********************MyWar类***********************/


package tank;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Arrays;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyWar{
public static void main(String[] args) {
JFrame frame = new JFrame("坦克大战");//新建一个窗口
War war = new War();//创建一个War类的对象
frame.add(war);//把war添加到窗口中
frame.setSize(750,530);//窗口宽高
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭时结束进程
frame.setLocationRelativeTo(null);//使窗口居中
frame.setVisible(true);//这句是干啥的
war.action();//启动(war)战斗,亲,可以游戏了!
}
}
class War extends JPanel{
private boolean sUp,sDown,sRight,sLeft,sH;//定义右边坦克按键的开关
private boolean sW,sD,sS,sA,sL;//定义左边坦克按键的开关
public static final int WIDTH=750;//定义地图宽度
public static final int HEIGHT=530;//定义地图高度
private int score;//设置分数
private boolean gameOver;//gameover=false表示游戏没有结束
private Timer timer;//刚学的东西
private int shootNum,shootNum1;//可以射击的子弹数,防止作弊
MyTank[] myTank=new MyTank[2];//定义一个我方坦克对象数组
EnemyTanks[] enemyTank=new EnemyTanks[5];//初始化敌人坦克的数量
EnemyTanks newEnemyTank;//用来产生一辆敌人的坦克,补充死去的T_T
Random r = new Random();
/**用于产生一辆新的敌人坦克,返回参数是EnemyTanks类型*/
public EnemyTanks nextTank(){
int x = r.nextInt(2)*WIDTH;//随机x的值,坦克出生在角落
int y=r.nextInt(2)*HEIGHT;//随机y的值,坦克出生在角落
int step=r.nextInt(4)+1;//速度
int direct=r.nextInt(4)+1;//方向
int who = r.nextInt(3)+1;//谁
newEnemyTank=new EnemyTanks(x,y,step,direct,who,true);
return newEnemyTank;//返回一个新坦克
}
public void action(){
startGame();//开始游戏函数
KeyAdapter l = new KeyAdapter(){//键盘监听
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();
if(key==KeyEvent.VK_Q){
System.exit(0);//Q关闭进程结束游戏
}
if(gameOver){
if(key==KeyEvent.VK_Y){
startGame();//Y键开始游戏
}
return;
}
switch(key){
case KeyEvent.VK_W:sW=true;break;
case KeyEvent.VK_A:sA=true;break;
case KeyEvent.VK_D:sD=true;break;
case KeyEvent.VK_S:sS=true;break;
case KeyEvent.VK_L:sL=true;break;
case KeyEvent.VK_RIGHT:sRight=true;break;
case KeyEvent.VK_LEFT:sLeft=true;break;
case KeyEvent.VK_DOWN:sDown=true;break;
case KeyEvent.VK_UP:sUp=true;break;
case KeyEvent.VK_H:sH=true;break;
}
repaint();
}
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
switch(key){
case KeyEvent.VK_W:sW=false;break;
case KeyEvent.VK_A:sA=false;break;
case KeyEvent.VK_D:sD=false;break;
case KeyEvent.VK_S:sS=false;break;
case KeyE

首页 上一页 1 2 3 4 5 6 下一页 尾页 1/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android.mk文件中的功能宏介绍 下一篇Android.mk中系统变量的介绍

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: