Java之详解坦克⼤战游戏(⼀)
相信⼤家⼩时候⼀定玩过坦克⼤战游戏,躲避敌⽅坦克,炸毁敌⽅坦克,不断向前进攻直逼敌⽅基地…这次,我们来实现⼀个简单版的坦克⼤战,我想学Java的⼈都有想到以前的按键⼿机⾥那菜单点开“Java”,⾥⾯很多游戏可以玩,⾃⼰⼼中也有做个游戏的念头,所以选择⼀个项⽬边学习新知识边运⽤也是不错的选择,⽽坦克⼤战这个游戏⽐较有意思好玩点,⽽且它涉及到Java各个⽅⾯的技术:
1.Java⾯向对象编程
2.界⾯编程
3.绘图技术
4.多线程
5.⽂件i/o操作
6.数据库
⼤家都应该知道坦克⼤战的玩法,这⾥就不详细解说了,⾸先,我们得先有坦克,即是说画⼀辆坦克..我
想学Java的⼈知道绘图技术,直接⼀张坦克图⽚画上去不是很简单的事,但是,直接画图⽚的话像素信息多,资源浪费厉害,所以我们不采取这种⽅式。
我们可以把坦克分成⼏个部分来画!如图:
也就是三个矩形,⼀个圆形,⼀条直线就OK了
(对⽅不想说话,并向你扔了⼀段源代码)
package com.TankGame;
import javax.swing.*;
import java.awt.*;
public class TankGame1extends JFrame
{//JFrame是⼀个顶层容器类
MyPanel mp =null;
public static void main(String[] args)
{
TankGame1 tankgame1 = new TankGame1();
}
public TankGame1()
{
mp=new MyPanel();
this.setVisible(true);//显⽰
this.setSize(400, 300);//设置⼤⼩(按像素)
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置当关闭窗⼝时,保证jvm也退出
//设置当关闭窗⼝时,保证jvm也退出
this.add(mp);//添加MyPanel组件
}
}
//我的⾯板
class MyPanel extends Panel
{
//定义⼀个我的坦克
Hero hero =null;
public MyPanel() //构造函数
{
hero =new Hero(100,100); //坦克的初始位置(100,100)
}
//重新paint
public void paint(Graphics g)
{//覆盖JPanel的paint⽅法
//Graphicd是绘图的重要类,可以理解为⼀只画笔
super.paint(g);//调⽤⽗类函数完成初始化
g.fillRect(0, 0, 400, 300); //填充使背景变为⿊⾊
this.X(), Y(), g, 0, 1);//画坦克
}
//画出坦克的函数
public void drawTank(int x,int y,Graphics g,int direct,int type)
{
简单的java游戏代码switch(type) //判断类型(敌⽅坦克还是⾃⼰的坦克),从⽽设置颜⾊ {
case0: //敌⽅坦克
g.an);
break;
case1: //我的坦克
g.llow);
break;
}
//判断⽅向(暂时先设置⼀种⽅向)
switch(direct)
{
//向上
case0:
//画出我的坦克
//1.画出左边的矩形
g.fill3DRect(x, y, 5, 30,false);
//2.画出右边矩形
g.fill3DRect(x+15, y, 5, 30,false);
//3.画出中间矩形
g.fill3DRect(x+5, y+5, 10, 20,false);
//4.画出圆形
g.fillOval(x+5, y+10, 10, 10);
//5.画直线
g.drawLine(x+10, y+15, x+10, y);
break;
}
}
}
//坦克类
class Tank
{
//表⽰坦克的横坐标
int x=0;
int x=0;
/
/表⽰坦克的纵坐标
int y=0;
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 Tank(int x,int y)
{
this.x=x;
this.y=y;
}
}
//我的坦克
class Hero extends Tank
{
public Hero(int x,int y)
{
super(x,y);
}
}
我想这⾥你可能会对上⾯代码中的画坦克有点疑惑
//1.画出左边的矩形
g.fill3DRect(x, y, 5, 30,false);
//2.画出右边矩形
g.fill3DRect(x+15, y, 5, 30,false);
/
/3.画出中间矩形
g.fill3DRect(x+5, y+5, 10, 20,false);
//4.画出圆形
g.fillOval(x+5, y+10, 10, 10);
//5.画直线
g.drawLine(x+10, y+15, x+10, y);
那些数值怎么确定的,其实这些都是经过多次测试觉得这个⽐较好
这样画出来的坦克好看⼀点,你们也可以试试别的画法,画长画短,最终坐标的确定是以左上⾓的红点为参照点的。
那为什么⽤fill3DRect这个⽅法呢,还是因为好看,如果⽤fillRect(…)⽅法,画出来如图轮廓不清晰,所以⽤3D效果的fill3DRect⽅法看起来坦克会更好⼀点。
最终在Eclipse运⾏结果如下:
这样我们就画好了第⼀辆坦克,第⼀步完成了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论