当前位置:文档之家› 2D坦克小游戏报告

2D坦克小游戏报告

2D坦克小游戏报告
2D坦克小游戏报告

课程设计

课程名称软件工程

题目名称_ 2D小坦克游________学生学院自动化学院

专业班级___网络工程4班________姓名学号____陈文东_____________

____3111001427_________指导教师钟灵

2014 年12 月 1 日

一,功能说明

1,按住屏幕上下滑动可以控制炮管角度

2,点击屏幕发射炮弹,另外如果摧毁了敌方的坦克或者飞碟会给自身加血

3,坦克行进过程中也有炮弹补给箱

二,界面设计

三,程序设计说明

1,总体框架设计:

控制自己的坦克将敌方的飞碟和坦克击溃。摧毁敌人的飞碟和坦克会给自己自身加血,如果给敌方击溃则游戏结束。

2,主要关键算法

MAINSCREEN:

package org.gjt.tank;

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

import org.gjt.base.IScene;

import org.gjt.base.Surface;

import org.gjt.ui.AnimationSprite;

import org.gjt.ui.Sprite;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.sax.StartElementListener;

import android.util.Log;

import android.view.MotionEvent;

public class MainScene implements IScene {

private Context context;

private Surface view;

private int mWidth,mHeight;

private Background background;

private Tank tank;

private List bullet = new ArrayList();

public static final float BULLET_SPEED=10;//子弹的速度

private static final float TANK_SPEED=3;//我方坦克的速度

private boolean isShootBullet;//是否发射子弹

private List enemy = new ArrayList();//敌人坦克

private List explode = new ArrayList();

private List goods = new ArrayList();

private Paint paint ;

private float life;

private List flyEnemy = new ArrayList();

private int count;//击落的坦克和飞碟数量

public MainScene(Surface view,Context context){

this.context = context;

this.view = view;

mWidth = context.getResources().getDisplayMetrics().widthPixels;

mHeight = context.getResources().getDisplayMetrics().heightPixels;

paint = new Paint();

}

@Override

public void load() {

BitmapManager.getInstance().loadSource(context);

background = new Background(mWidth, mHeight);

background.init();

tank = new Tank(mWidth*10/100, mHeight*80/100, mWidth*10/100+106,mHeight*80/100+62);

life = 100;

}

@Override

public void draw(Canvas canvas) {

// canvas.drawBitmap(BitmapManager.getInstance().bg, 0,0, null);

background.draw(canvas);

//我方子弹

for(int i=0;i

bullet.get(i).draw(canvas);

}

//敌人---坦克

for (int i = 0; i < enemy.size(); i++) {

enemy.get(i).draw(canvas);

}

//敌人--飞碟

for (int i = 0; i < flyEnemy.size(); i++) {

flyEnemy.get(i).draw(canvas);

}

//我方坦克

tank.draw(canvas);

//爆炸特效

for (int i = 0; i < explode.size(); i++) {

explode.get(i).draw(canvas);

}

//物品

for (int i = 0; i < goods.size(); i++) {

goods.get(i).draw(canvas);

}

paint.reset();

paint.setColor(0x70ffff00);

canvas.drawRect(0, 0, mWidth, 30, paint);

paint.setColor(0xf0ff0000);

canvas.drawRect(0, 0, mWidth*life/100, 30, paint);

paint.setColor(Color.WHITE);

paint.setTextSize(20);

paint.setStrokeWidth(4);

canvas.drawText("歼敌:"+count,("歼敌:"+count).length() , mHeight-18, paint);

}

private long bullet_start;

private long tank_start;

private long fly_start;

private long goods_start;

private boolean isGameOver;

@Override

public void logic() {

//背景

background.logic();

//我方坦克

tankLogic();

//敌人坦克

enemyLogic();

//飞碟

flyEnemyLogic();

//子弹与坦克碰撞检测

isCollision();

//物品

goodsLogic();

//爆炸特效的帧动画播放完毕后,移除

for (int i = 0; i < explode.size(); i++) {

if(explode.get(i).isEnd()){

explode.remove(i);

}

}

if(life<0&&!isGameOver){

//游戏结束标志

isGameOver = true;

GameOver scene = new GameOver(context, view);

scene.load();//载入初始数据

//交换场景

view.setScene(scene);

}

}

private void flyEnemyLogic() {

long end = System.currentTimeMillis();

if(end - fly_start>5000){

fly_start = end;

float x = getTankPosition(0, mWidth/2/BitmapManager.getInstance().fly.getWidth());

Enemy t = new Enemy(mWidth*50/100+x*BitmapManager.getInstance().fly.getWidth(),

-BitmapManager.getInstance().fly.getHeight(),

mWidth*50/100+x*BitmapManager.getInstance().fly.getWidth()

+BitmapManager.getInstance().fly.getWidth(),

0);

t.setBitmap(BitmapManager.getInstance().fly);

t.setBulletBitmap(BitmapManager.getInstance().bullet3);

t.setRotate(45);

flyEnemy.add(t) ;

}

//更新坦克的位置

for(Enemy t:flyEnemy){

t.logic(mWidth,mHeight);

t.setX(t.getX()-TANK_SPEED);

t.setWidth(t.getWidth()-TANK_SPEED);

if(t.isUp()){

t.setY(t.getY()-TANK_SPEED);

t.setHeight(t.getHeight()-TANK_SPEED);

}else{

t.setY(t.getY()+TANK_SPEED);

t.setHeight(t.getHeight()+TANK_SPEED);

}

// Log.i("TAG",

"fly:x="+t.getX()+",y="+t.getY()+",width="+t.getWidth()+",height="+t.getHeight());

//如果已经mHeight*90/100差陆了,向上飞

if(t.getHeight()>mHeight*90/100){

t.setUp(true);

}

//如果已经到mHeight*15/100的高度向下飞

if(t.isUp()&&t.getY()0)

t.setUp(false);

}

//坦克是否超过出屏幕

for(int i=0;i

Enemy t = flyEnemy.get(i);

if(t.getWidth()<0){

flyEnemy.remove(t);

}

}

}

private void goodsLogic() {

//碰撞

for(Sprite s : goods){

if(s.isIntersect(tank)){

goods.remove(s);

if(life<100)

life+=10;

}

}

//修改

for(Sprite s : goods){

s.setX(s.getX()-2);

s.setWidth(s.getWidth()-2);

}

//删除

for(Sprite s : goods){

if(s.getWidth()<0){

goods.remove(s);

}

}

//增加物品

long end = System.currentTimeMillis();

if(end - goods_start>30000){

goods_start = end;

Sprite g = new Sprite(mWidth,mHeight*80/100,

mWidth+BitmapManager.getInstance().blood.getWidth(), mHeight*80/100+BitmapManager.getInstance().blood.getHeight());

g.setBitmap(BitmapManager.getInstance().blood);

goods.add(g);

g= null;

}

}

private void isCollision(){

//坦克和坦克的子弹

for(int i=0;i

Enemy t = enemy.get(i);

for(int j=0;j

Bullet b = bullet.get(j);

//我方子弹击中敌人坦克时

if(b.isIntersect(t)){

AnimationSprite anim = new AnimationSprite(t.getX(),t.getY(),

t.getX()+BitmapManager.getInstance().explode1[0].getWidth(),

t.getY()+BitmapManager.getInstance().explode1[0].getHeight());

anim.setBitmap(BitmapManager.getInstance().explode1);

explode.add(anim);

enemy.remove(t);

bullet.remove(b);

count++;

}

//双方子弹对撞

if(t.isCollision(b)){

AnimationSprite anim = new AnimationSprite(b.getX(), b.getY(),

b.getX()+15+BitmapManager.getInstance().explode2[0].getWidth(),

b.getY()+10+BitmapManager.getInstance().explode2[0].getHeight());

anim.setBitmap(BitmapManager.getInstance().explode2);

explode.add(anim);

bullet.remove(b);

}

}

//敌人坦克与我方坦克相撞时

if(t.isIntersect(tank)){

AnimationSprite anim = new AnimationSprite(t.getX(),t.getY(), t.getX()+BitmapManager.getInstance().explode1[0].getWidth(),

t.getY()+BitmapManager.getInstance().explode1[0].getHeight());

anim.setBitmap(BitmapManager.getInstance().explode1);

explode.add(anim);

anim = null;

enemy.remove(t);

//掉血

life -=10;

count++;

}

//坦克的子弹是否击中我方坦克

if(t.isCollision(tank)){

AnimationSprite anim = new AnimationSprite(tank.getWidth()-15, tank.getY()+15,

tank.getWidth()-15+BitmapManager.getInstance().explode2[0].getWidth(),

tank.getY()+15+BitmapManager.getInstance().explode2[0].getHeight());

anim.setBitmap(BitmapManager.getInstance().explode2);

explode.add(anim);

//掉血

life -=10;

}

}

for(int i=0;i

Enemy t = flyEnemy.get(i);

for(int j=0;j

Bullet b = bullet.get(j);

//我方子弹击中敌人坦克时

if(b.isIntersect(t)){

AnimationSprite anim = new AnimationSprite(t.getX(),t.getY(),

t.getX()+BitmapManager.getInstance().explode1[0].getWidth(),

t.getY()+BitmapManager.getInstance().explode1[0].getHeight());

anim.setBitmap(BitmapManager.getInstance().explode1);

explode.add(anim);

flyEnemy.remove(t);

bullet.remove(b);

count++;

}

//双方子弹对撞

if(t.isCollision(b)){

AnimationSprite anim = new AnimationSprite(b.getX(), b.getY(),

b.getX()+15+BitmapManager.getInstance().explode2[0].getWidth(),

b.getY()+10+BitmapManager.getInstance().explode2[0].getHeight());

anim.setBitmap(BitmapManager.getInstance().explode2);

explode.add(anim);

bullet.remove(b);

}

}

//飞蝶与我方坦克相撞

if(t.isIntersect(tank)){

AnimationSprite anim = new AnimationSprite(t.getX(),t.getY(), t.getX()+BitmapManager.getInstance().explode1[0].getWidth(),

t.getY()+BitmapManager.getInstance().explode1[0].getHeight());

anim.setBitmap(BitmapManager.getInstance().explode1);

explode.add(anim);

flyEnemy.remove(t);

count++;

}

//飞碟的子弹是否与我方坦克相撞

if(t.isCollision(explode,tank)){

//掉血

life -=10;

}

//碰撞到地面的子弹

t.isCollision(explode, mHeight*90/100);

// for(Bullet b :t.bullet){

// if(b.getHeight()>mHeight*90/100){

// t.bullet.remove(b);

// AnimationSprite anim = new AnimationSprite(b.getX(), b.getY(),

//

b.getX()+BitmapManager.getInstance().explode2[0].getWidth(),

//

b.getY()+BitmapManager.getInstance().explode2[0].getHeight());

// anim.setBitmap(BitmapManager.getInstance().explode2);

// explode.add(anim);

// anim = null;

// b = null;

// }

// }

}

}

private void enemyLogic(){

long end = System.currentTimeMillis();

if(end - tank_start>3500){

tank_start = end;

int index = (int) (Math.random()*100%BitmapManager.getInstance().tank.length);

float y = getTankPosition(0, 3);

// Log.i("TAG", "size="+enemy.size()+",y="+y+",index="+index);

Enemy t = new Enemy(mWidth,

mHeight*75/100+y*10,

mWidth+BitmapManager.getInstance().tank[index].getWidth(),

mHeight*75/100+y*10+BitmapManager.getInstance().tank[index].getHeight());

t.setBitmap(BitmapManager.getInstance().tank[index]);

t.setBulletBitmap(BitmapManager.getInstance().bullet2);

enemy.add(t);

}

//更新坦克的位置

for(Enemy t:enemy){

t.logic(mWidth,mHeight);

t.setX(t.getX()-TANK_SPEED);

t.setWidth(t.getWidth()-TANK_SPEED);

}

//坦克是否超过出屏幕

for(Enemy t:enemy){

if(t.getWidth()<0){

enemy.remove(t);

}

}

}

private float getTankPosition(float y1,float y2){

return Math.abs(new Random().nextInt()%(y2-y1)+y1);

}

private float downX,downY;

@Override

public void touchDown(MotionEvent event) {

downX = event.getX();

downY = event.getY();

}

@Override

public void touchUp(MotionEvent event) {

if(event.getX()==downX&&downY==event.getY()){

isShootBullet = true;

}

}

@Override

public void touchMove(MotionEvent event) {

//GUN上升

if(downY-event.getY()>120){

tank.gunUp();

}//下降

else if(event.getY()-downY>120){

tank.gunDown();

}

//向后退

if(downX-event.getX()>120){

if(tank.getX()>0){

tank.setX(tank.getX()-1);

tank.setWidth(tank.getWidth()-1);

}

}//向前进

else if(event.getX()-downX>120){

if(tank.getWidth()+TANK_SPEED

tank.setX(tank.getX()+1);

tank.setWidth(tank.getWidth()+1);

}

}

}

private void tankLogic(){

// 更新我方子弹的位置

for (int i = 0; i < bullet.size(); i++) {

Bullet b = bullet.get(i);

double degress = Math.toRadians(b.getRotate());

// double degress = Math.abs(Math.toRadians(tank.getRotate()));

float y = (float) (Math.sin(degress) * BULLET_SPEED);

float x = (float) (Math.cos(degress) * BULLET_SPEED);

b.setX(b.getX() + x);

b.setWidth(b.getWidth() + x);

b.setY(b.getY() + y);

b.setHeight(b.getHeight() + y);

Log.i("TEST", "bullet:x=" + b.getX() + ",y=" + b.getY());

}

// 检测我方子弹是否已经超出屏幕以外

for (int i = 0; i < bullet.size(); i++) {

Bullet b = bullet.get(i);

if (b.getX() > mWidth || b.getHeight() < 0 || b.getY() > mHeight

|| b.getWidth() < 0) {

bullet.remove(b);

}

}

// 发射子弹

if (isShootBullet) {

long end = System.currentTimeMillis();

// 增加子弹

if (end - bullet_start > 800) {

bullet_start = end;

// gun w=45

double radians = Math.toRadians(tank.getRotate());

float x = (float) (Math.sin(radians) * 20);

float y = (float) (Math.cos(radians) * 20);

Log.i("TAG", "tank--->x=" + x + ",y=" + y);

Log.i("TAG","tank121--->x=" + tank.getGunX() + ",y="+ tank.getGunY());

x += tank.getGunX();

y += tank.getGunY();

Log.i("TAG", "tank--->>>x=" + x + ",y=" + y);

Bullet b = new Bullet(x -

BitmapManager.getInstance().bullet1.getWidth(),

y- BitmapManager.getInstance().bullet1.getHeight(),

x, y);

b.setBitmap(BitmapManager.getInstance().bullet1);

b.setRotate(tank.getRotate());

bullet.add(b);

}

// 发射子弹完成

isShootBullet = false;

}

}

@Override

public void distory() {

}

}

GAMEOVER功能:

package org.gjt.tank;

import org.gjt.base.IScene;

import org.gjt.base.Surface;

import android.content.Context;

import android.graphics.Canvas;

import android.view.MotionEvent;

public class GameOver implements IScene {

private Context context;

private Surface view;

private boolean isStart;

private boolean isLoad;

public GameOver(Context context,Surface view){

this.context = context;

this.view = view;

}

@Override

public void load() {

}

@Override

public void draw(Canvas canvas) {

canvas.drawBitmap(BitmapManager.getInstance().gameover, 0,0, null);

}

@Override

public void logic() {

if(isStart&&!isLoad){

isLoad = true;//加载状态标志

isStart = false;//关闭开始标志

MainScene game = new MainScene(view, context);

game.load();//载入初始数据

view.setScene(game);

}

}

@Override

public void touchDown(MotionEvent event) {

isStart = true;

}

@Override

public void touchUp(MotionEvent event) {

}

@Override

public void touchMove(MotionEvent event) {

}

@Override

public void distory() {

}

}

Mainactivity:

package org.gjt.tank;

import org.gjt.base.Surface;

import android.app.Activity;

import android.content.pm.ActivityInfo;

import android.os.Bundle;

import android.view.Window;

import android.view.WindowManager;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(https://www.doczj.com/doc/8b12229471.html,youtParams.FLAG_FULLSCREEN,

https://www.doczj.com/doc/8b12229471.html,youtParams.FLAG_FULLSCREEN);

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE );

Surface view = new Surface(this);

view.setScene(new MainScene(view, this));

setContentView(view);

}

}

敌人功能:

package org.gjt.tank;

import java.util.ArrayList;

import java.util.List;

import org.gjt.ui.AnimationSprite;

import https://www.doczj.com/doc/8b12229471.html,yer;

import org.gjt.ui.Sprite;

import org.gjt.ui.Tiled;

import android.graphics.Bitmap;

import android.graphics.Canvas;

public class Enemy extends Layer {

public List bullet = new ArrayList();

protected long start;

protected float rotate;

private boolean isUp;

private Bitmap bulletBitmap;

public Enemy(float x, float y, float width, float height) {

super(x, y, width, height);

}

@Override

public void draw(Canvas canvas) {

super.draw(canvas);

for(int i=0;i

bullet.get(i).draw(canvas);

}

}

public void logic(float mWidth,float mHeight){

//更新位置

for(Sprite b : bullet){

// logger("enemy:bullet:x="+b.getX()+",y="+b.getY());

if(b.getRotate()>0){

// b.setY(b.)

double radian = Math.toRadians(b.getRotate());

float y = (float) (Math.sin(radian)*MainScene.BULLET_SPEED);

float x = (float) (Math.cos(radian)*MainScene.BULLET_SPEED);

logger("fly::x="+x+",y="+y);

b.setX(b.getX()-x);

b.setY(b.getY()+y);

b.setWidth(b.getWidth()-x);

b.setHeight(b.getHeight()+y);

}else{

b.setX(b.getX()-MainScene.BULLET_SPEED);

b.setWidth(b.getWidth()-MainScene.BULLET_SPEED);

}

}

//删除经超出屏幕外的子弹

for(int i=0;i

Sprite b = bullet.get(i);

//是否已经超出屏幕区域

if(b.getWidth()<0){

bullet.remove(b);

continue;

}

}

//增加发子弹

long end = System.currentTimeMillis();

if(end - start>5000){

start = end;//很关键,不要忘记了

Sprite b = new Sprite(x-bulletBitmap.getWidth(),

y+bulletBitmap.getHeight()/3*2,

x,

y+bulletBitmap.getHeight()/3*2+bulletBitmap.getHeight());

b.setRotate(rotate);

b.setBitmap(bulletBitmap);

bullet.add(b);

}

}

//子弹是否与目标碰撞

public boolean isCollision(Tiled tank){

for(Sprite b :bullet){

if(b.isIntersect(tank)){

bullet.remove(b);

b = null;

return true;

}

}

return false;

}

public boolean isCollision(List list,float position){ for(Sprite b :bullet){

if(b.getHeight()>position){

AnimationSprite anim = new AnimationSprite(b.getX(), b.getY(),

b.getX()+BitmapManager.getInstance().explode2[0].getWidth(),

b.getY()+BitmapManager.getInstance().explode2[0].getHeight());

anim.setBitmap(BitmapManager.getInstance().explode2);

list.add(anim);

anim = null;

bullet.remove(b);

b = null;

return true;

}

}

return false;

}

public boolean isCollision(List list,Tiled pos){

for(Sprite b :bullet){

if(b.isIntersect(pos)){

AnimationSprite anim = new AnimationSprite(b.getX(),

b.getY(),

b.getX()+BitmapManager.getInstance().explode2[0].getWidth(),

b.getY()+BitmapManager.getInstance().explode2[0].getHeight());

anim.setBitmap(BitmapManager.getInstance().explode2);

list.add(anim);

anim = null;

bullet.remove(b);

b = null;

return true;

}

}

return false;

}

public float getRotate() {

return rotate;

}

public void setRotate(float rotate) {

this.rotate = rotate;

}

public boolean isUp() {

return isUp;

}

public void setUp(boolean isUp) {

this.isUp = isUp;

}

public Bitmap getBulletBitmap() {

return bulletBitmap;

}

public void setBulletBitmap(Bitmap bulletBitmap) {

this.bulletBitmap = bulletBitmap;

}

}

四,心得体会

首先自己一开始接触这个程序觉得完蛋了,但是跟同学讨论一下,都是参考一下,然后自己了解一下,修改一下,从中领悟和了解里面代码的意义与真正作用,然后利用平时学到的一些小编程知识和同学讨论的结果运用到里面。

在中间不免遇到很多不会的问题,实在令人费解,然而跟同学一起去思考去奋斗,顿然有了力量去突破。

总之要感谢这次机会,让我明白真正的水平不仅仅只局限于书本,而最多取决于自主创新和收集信息的能力。相信通过这次实习,我的编程能力已经提升了不少。我也会在以后编程时获得一个大概的思路,让我能够更好地面对将来编程中出现的问题

五,参考文献和资料

[1] 循序渐进的JA V A2教程

[2]https://www.doczj.com/doc/8b12229471.html,

[3]JA V A基本思想

[4] JA V ASCIPT

《坦克世界》游戏介绍

首先进入游戏后,大家的车库中会有三个国家的最低级实验战车,分别是德俄美。别看不起这些小坦克,因为必须从他们开始,慢慢打战场积累经验才能研发高级的装备和车型。 终于喜欢用哪个国家的看自己的喜好了。目前德国和俄国的坦克品种,美国的坦克相对来说较少,等后期的慢慢更新应该会加如更多的坦克。通过打战场获得经验研发路线也是看人的爱好了。 简单说说重坦,中坦,轻坦,反坦克炮,自行火炮的区别。重型火力猛护甲高,移动速度慢。中型和轻型一般用于突袭和侦查,如果你喜欢玩刺激一点,和对自己的操作很有信心不妨试试。反坦克炮隐蔽时不容易别人发现,敌人要很近才能发现你。反坦克炮从名字来看,就知道是坦克杀手。但是他的护甲很低,容被秒。自行火炮比较犀利,他不同与普通坦克直线射击,它是抛物线,等级高了后射程全屏。前提是要自己的队友探路发现敌人的位置。有点像CS中的狙击手一样。 好了不废话了,进游戏。。。 目前系统的战斗模式是15V15,系统都会自动分配好。各种车型,以达到一个战场的平衡性。前期大家都是新手,都是轻坦。炮小移动速度慢,这里强烈提醒,开局后不要一个劲往前冲,因为你不是神,也不是GM。 明智之举是找个地方掩护起来,在树林里或者灌木丛中掩护起来,敌人可视发现你的范围会变小。等他们靠近时,还没等他发现你,你就能在掩体中将他干掉。蹲点送人送上门是明智之举。然后后期,各种车型都有了,就要讲究一个团队的配合,今天是新手攻略我就不详细说了。 等发现了敌人,最好用拉近标准这样打的准点,用远视角很难命中。注意了,坦克的正面和炮塔是装甲最厚的,如果你直接朝着他的正面打一般掉HP很少,或者跳弹炮弹被弹开。所以最好就是打它们的侧面和屁股,这些地方护甲低。我们经常称为“爆菊”你们懂的。 普通坦克都用3种炮弹,一种是AP,一种HE,一种是用金币买的超级AP弹。AP弹穿甲能力强但是伤害低,HE弹伤害高但是穿甲不强。超级AP就是传说中的人民币辅助装备,穿甲强伤害也不错。同级别的坦克对持一般都是用AP,如果遇见低级的坦克或者火炮什么的,果断换成HE干掉。不过要在安全的地方先换好。要不等你装弹的时候被别人揍的没话说。 等大家赚到了经验,可别光想着先研发大威力的火炮和炮塔。无线电,发动机,悬挂,这些东西跟上了才能让你在复杂的地形中,获得更大的生存空间。

小游戏坦克大战

非常简单的几个控件,实现了一个坦克移动,并打出子弹的小游戏.希望能给大家带来一点乐趣和知识. 注:本程序离真正的游戏差的很远,只用来让初学者对一些控件及线程更加深入的理解和应用才实现的. 所用控件及类: Button,Label,ImageList,contextMenuStrip,Threading,ArrayList 所用事件: Button :KeyPress事件. 注意: 在ImagesList控件中添加四张图片,分别是坦克的上下左右的四张图.然后用Button的ImageList 属性绑定ImageList控件. 所用的四张图片: Bullet是通过Lable类new出来的对象 线程调用方法时使用的是带参数调用ParameterizedThreadStart contextMenuStrip右建菜单用来关闭程序 以下为游戏的源码: 坦克 using System; using System.Collections.Generic; using System.Collections; using https://www.doczj.com/doc/8b12229471.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; namespace 坦克大战 { /**////

/// 说明:在.net2.0及WinForm中坦克小游戏的示例

/// 作者:剑了 /// 日期:2008-10-02 /// 首发地址:https://www.doczj.com/doc/8b12229471.html,/https://www.doczj.com/doc/8b12229471.html,/ ///

public partial class Form1 : Form { private static int screenWidth;//屏幕宽度 private static int screenHeight;//屏幕高度 private string Direction;//定义当前方向 public Form1() { InitializeComponent(); screenHeight = Screen.PrimaryScreen.Bounds.Height;//获取屏幕宽度 screenWidth = Screen.PrimaryScreen.Bounds.Width;//获取屏幕高度 Control.CheckForIllegalCrossThreadCalls = false;//不捕获错误的线程} /**//// /// 开炮的过程 /// /// private void Fire(object paramters) { ArrayList al = (ArrayList)paramters; Label Bullet = (Label)al[0]; string direction = (string)al[1]; bool outOfScreen = false;//子弹是否超出屏幕显示区域 while (!outOfScreen)//当子弹没有超出屏幕显示区域的时候,继续移动子弹 { switch (direction)

Java语言坦克大战游戏设计(附有代码和图片)

JISHOU UNIVERSITY 本科生毕业设计 题目:基于java语言坦克大战游戏开发作者: 学号: 所属学院:信息科学与工程学院 专业年级: 指导教师:职称: 完成时间: 吉首大学教务处制

目录 基于java语言坦克大战游戏开发 (1) 摘要 (1) Based on the development of Java language Tank Wars Game (2) 第一章游戏简要说明 (3) 第二章开发环境介绍 (4) 2.1 开发环境 (4) 2.2 java语言特点简介 (4) 2.3 Eclipse开发工具的简介 (5) 第三章系统总体设计 (6) 3.1程序功能的总和 (6) 3.2主体模块 (6) 3.3子弹模块 (6) 3.4坦克模块 (7) 3.5 墙模块 (7) 3.6血液模块 (7) 3.7爆炸模块 (8) 第四章游戏详细设计过程 (9) 4.1创建游戏窗口 (9) 4.2改变游戏背景颜色。 (11) 4.3创建坦克 (11) 4.4 让坦克动起来 (12) 4.5改变窗口的大小 (13) 4.6让坦克受控制 (14) 4.7创建一个Tank类 (15) 4.8让坦克向8个方向移动 (16)

4.9修改4.8中所设计的不足 (18) 4.10添加子弹类 (19) 4.11根据己方坦克的位置,打出子弹 (21) 4.12修改坦克停下来不能打出子弹的问题 (21) 4.13让坦克能够打出多发子弹 (23) 4.14解决炮弹不消亡和坦克出界的问题 (23) 4.15增加敌方坦克 (24) 4.16击毙出现的敌方坦克 (25) 4.17加入爆炸效果 (26) 4.18添加多辆敌方坦克 (27) 4.19让敌方坦克智能化 (29) 4.20建立游戏障碍物 (31) 4.21阻止坦克互相穿越 (32) 4.22为我方坦克添加大招和血条 (33) 4.23添加血块 (34) 4.24重新载入敌军或我军坦克 (35) 4.25加入图片 (35) 第五章游戏的可行性测试 (37) 5.1游戏界面介绍 (37) 5.2游戏运行测试 (40) 第六章总结 (43) 参考文献 (44)

坦克大战游戏设计与制作

目录 1 需求分析 (1) 1.1 用户简介 (1) 1.2 项目目的和目标 (1) 1.3 功能和环境 (1) 2 系统设计 (2) 3 系统实现 (3) 3.1系统框架设计与实现 (3) 3.1.1 系统框架功能概述 (3) 3.1.2 系统框架实现过程 (3) 3.2 地图模块设计与实现 (5) 3.2.1 地图模块功能概述 (5) 3.2.2 地图模块实现过程 (5) 3.3坦克模型模块设计与实现 (6) 3.3.1 坦克模块功能概述 (6) 3.3.2 坦克模块实现过程 (7) 3.4敌方坦克模块设计与实现 (8) 3.5炮弹模块设计与实现 (8) 3.5.1 炮弹模块实现过程 (8) 3.6炮弹碰撞检测模块设计与实现 (9) 3.6.1 炮弹碰撞检测模块功能概述 (9) 3.6.2 炮弹碰撞检测模块实现过程 (9) 3.7信息面板模块设计与实现 (10) 3.7.1 信息面板模块功能概述 (10) 3.7.2 信息面板模块实现过程 (11) 4 实训总结 (13) 附录 (14)

1 需求分析 1.1 用户简介 近年来,手机游戏市场规模迅速增长,市场潜力巨大,同时,我国政府在大力扶持手机游戏行业,特别是对我国本土游戏企业的扶持,手机游戏已被列入国家863计划。积极参与游戏开发的国内企业可享受政府税收优惠和资金支持,同时,政府也加紧了对外国游戏开发商的管理制度。除此之外,我国政府各部门还采取了各种各样的形式来帮助发展国内手机游戏行业,手机游戏产业正高速发展。 用户角色大致分为:玩家 1.2 项目目的和目标 随着科技的发展,手机的功能越来越强大,手机已经成为大多数人生活的一部分,人们渐渐习惯于将手机作为新的娱乐工具,而游戏也已成为手机上不可缺少的功能。如今手机游戏的规划越来越复杂,画而越来越精美,娱乐性和交互性也越来越强,已经可以和当年的“Gameboy”掌上游戏相媲。 因此,开发这样一个娱乐游戏成为很有必要的事情。经过思考,我们设计了一块一款“坦克大战”的游戏以丰富人们的娱乐生活。 1.3 功能和环境 功能:坦克大战共分为两个对象,分别是用户和电脑。用户可以通过控制玩家的坦克来摧毁敌方的坦克保护自己的“家”,把所有的敌方坦克消灭完达到胜利。敌方的坦克在初始的时候是默认三十个的(这可以自己设置),当然,如果玩家被敌方坦克的子弹打中,那就gameover。 运行环境:Java虚拟机。

坦克大战游戏程序课程设计

《程序设计应用基础》课程设计计划书

坦克大战游戏 1引言 学习了C语言程序设计之后,我们粗略的掌握了程序设计的基本思路和要求,为了更加熟练的掌握这门计算机语言,我们选择编译一个经典小游戏——坦克大战。通过课程设计提高我们的动手能力,把理论知识运用到实践当中。在课程设计中,C语言的语法和逻辑严谨,对于初学者而言,有时忘记一个逗号或者分号整个程序便运行不了,经过了反复的调试,修改,最终形成可执行的程序。在这个过程中,通过不断的练习,我们对C语言的掌握程度有明显的提高,同时,也锻炼了我们的头脑,使我们的思维更加科学严谨。 2设计方案 2.1设计思路 坦克大战游戏,一共两关。不同的关卡,游戏地图、敌方坦克出现的种类不一样。敌方坦克地图上最多存在4辆,击杀后会出现新坦克直至补足4个,当击杀坦克一定数值则敌方新坦克不会再增加。击杀完所有坦克则胜利过关。己方坦克也有复活次数,用完则失败。另地图正下方有己方老家,若被敌方坦克攻破则游戏失败。 3程序设计与实施 3.1程序的主要模块 整个程序分为里表两大部分。 里部分由41*41的int地图数组组成,每个元素代表了该以该数组元素行列下标为地图坐标y,x那个单元的情况,不同的地图障碍物在该数组有不同的值,坦克在地图上占3*3个单元,在地图数组内相应坐标的3*3个元素内也对应特殊的值。由地图数组值可以读出该坦克信息。 表部分则是根据里部分的地图数组通过gotoxy和printf函数在命令行界面打印出相应字符以构成游戏界面的。 程序中的每个函数操作都是通过里部分(地图数组)判定,然后对里部分(地图数组)操作,再由里部改变外部,由gotoxy和printf函数将可视化界面呈现给玩家。也就是游戏主体函数内里表部分是一起操作的,不分开。 对于函数分类,程序又可分为三大类。一类游戏辅助函数。一个子弹系统,一个坦克系统。子弹和坦克分别都是独立运作的系统,有少量信息交换。 3.2 主函数及其流程图 主函数包括打印地图,实现游戏内置调节游戏速度的功能,判断坦克类型,判断敌我坦克是否存活,判断游戏胜负。 3

《坦克大战》游戏c++ 需求

《坦克大战》游戏c++ 需求 一.The idea 相信我们小的时候都曾经有过打游戏机的经历,那时我们常常抱着小霸王游戏机,玩得废寝忘食,甚至每天都因没有完成作业而挨老师骂,然而我们依然乐此不疲。那时非常出名的一个游戏就是《坦克大战》,我再次玩起的时候,仍然可以回忆起儿时的快乐。每次放学回家,把书包一扔,就和同学坐在电视机前。虽然《坦克大战》这个游戏设计得并不复杂,或者可以说是很简单的,但是它似乎蕴涵着无穷的魅力,让人们想一遍一遍的玩下去。 《坦克人生》是一款ARPG游戏,玩家将控制一个起初毫无名气的小坦克,为了自己的理想闯天下,四处行侠仗义,书写自己辉煌的坦克人生。 谨以此游戏献给那些儿时热衷《坦克大战》的朋友,让我们一起重温打坦克带给我们的无限乐趣。 二.游戏概要 1,中文名称:坦克人生 2,英文名称:The Tank Life 3,游戏类型:ARPG 4,操作系统:Windows 5,游戏操作:键盘 6,硬件配置:80486以上CPU,16M内存,20M硬盘空间,支持DIRECTX8.0 三.游戏核心The gameplay 《程序人生》的主坦克将具备丰富的个体属性,并能够携带多种物品。游戏的主体将随着任务的推进进行场景的切换,在每个场景中可以与NPC进行对话,获取任务,然后通过消灭敌人坦克来推进情节。同时情节将设置主线和分支。玩家不同的选择,也将造成不同的游戏结局。主坦克的个体升级,装备的更换,以及丰富的炮弹系统将是游戏很大的亮点。 四.游戏编程文件结构(类设计) 1,主程序:Game.h Game.cpp 成员函数设计:游戏初始化,环境设置,角色初始化,绘制地图,对话初始化

第三十一课 经典游戏坦克大战真实版

第三十一课经典游戏《坦克大战》真实还原版 今日任务: 将经典游戏《坦克大战》还原于scratch程序中,让学生体验真实游戏的设计流程和思路,具体游戏视频见最下方微课解读! (1)玩家可以操控一辆己方坦克进行上下左右移动,在移动过程中坦克会被障碍物阻挡无法逾越必须绕道,玩家可以按下J键发射子弹,为了避免按下J键连发,程序中添加了防止连发的指令;当玩家的子弹击中障碍物,障碍物会短暂消失,然后还会再度出现,同时,当子弹击中了地方坦克,地方坦克会消失,一会儿还会随机出现; (2)敌方坦克会在三个不同的位置随机出现,并且可以边移动变发射子弹,敌方子弹击中障碍物会击毁障碍物,同时,敌方坦克击中castle或者击中己方坦克,游戏gameover! 本课重难点: (1)如何实现己方坦克通过判断炮管的位置向不同方向发射子弹? (2)敌方坦克在地图中应该如何移动? (3)敌方坦克碰到障碍物应该作何反应? (4)敌方坦克向不同方向开火问题如何解决? (5)我方坦克、敌方坦克击中不同目标的判断? (6)游戏失败的定义? 任务解读Thinking map:

程序分析: (1)背景:可分为正常背景和失败背景; (2)己方坦克:键盘控制坦克的左右移动; 键盘控制坦克发射子弹;发射子弹的瞬间判断坦克的朝向,可以实现向四个不同的方向发射子弹; 被障碍物阻挡做出反应; (3)敌方坦克:在屏幕指定位置出现; 在屏幕上移动;移动过程中碰到障碍物和边缘做出反应;可以向四个不同的方向发射子弹; (4)障碍物:被击中后一段时间内消失再出现;阻挡坦克。 程序设计: 第一步:搞定背景,共两个背景1和2;1为白色背景,2为game over背景!

JAVA课程设计坦克大战游戏(含代码)

Java课程设计 任务书 简单电子游戏坦克大战的设计 1、主要内容: 设计一个简单的坦克大战电子游戏,可以允许多位玩家在局域网 中同时对战 2、系统要求:游戏具有图形游戏界面,能让用户看到游戏所给出的反馈。有人机交互功能,使用户操作指定的游戏元素,并且坦克具有生命值,能攻击敌方,无法攻击友方,而且坦克的攻击具有视觉效果! 3、具体要求(包括技术要求等): 1.需要有图形游戏界面,让用户能看到游戏给出的反馈 2.有人机交互功能,使用户能操作指定的游戏元素 3.不同队伍的坦克,须显示不同外观,已分辨敌我 4.坦克能够开火,攻击敌方,但不能攻击队友 5需要有不可被子弹穿透的墙 6.坦克有生命值,并非被击中一次就会爆炸 7游戏结束后可重新开始 学习并掌握以下技术:Java、JavaBean 等 熟练使用以下开发工具:Myeclipse 等 实现系统上述的功能。 4、进度安排: 12月28日~ 12月29日:课程设计选题,查找参考资料 12月30日~ 1月1日:完成系统设计和数据库设计 1月2日~ 1月4日:完成程序代码的编写 1月4日~ 1月5日:系统测试与完善 1月5日~ 1月6日:完成课程设计报告,准备答辩 分工:

随着计算机的普及以及对电子游戏的认识,电子游戏已被越来越多的人选作放松、娱乐的休闲方式;电子游戏既不需要专门购买游戏器材,也不需要宽阔的游戏场地,只需要一台能独立完成任务的计算机即可,它可以是人们工作、学习时用的计算机,并不需要另行配置,这比起传统休闲游戏即省钱又省事。局域网游戏更是可以将现实空间中零散的计算机,组织起来,使其在逻辑空间中集中起来,使游戏的组织、开展变得轻松。如此轻松而又安逸的休闲方式,使得越来越多的人尝试,甚至已经将电子游戏作为主要休闲方式,既然有如此多的人使用,那其中必然存在巨大的商机,即使人们不愿意为一个小小的休闲游戏花费金钱,但在游戏中添加广告、游戏相关服务也包藏了巨大的财富;当然电子游戏的制作如今已是空前的火爆,大大小小的游戏公司横空出世,都想在电子游戏制作这个行业里占据一席之地,而一款成功的电子游戏需要精心的策划、分析、设计,只有这样才能获得游戏中包藏的财富,以及做出一款真正能够让玩家娱乐、放松的游戏,而不是骗取玩家钱财的工具。 关键字:电子游戏;坦克大战;

幼儿园大班体育游戏:奇妙的“坦克”

大班体育游戏:奇妙的“坦克” 设计思路: 大班幼儿已能熟练掌握各项基本动作,身体的协调性也发展得较好。对游戏已有浓厚 的兴趣,有好奇心和探索性。因此怎样在有难度的活动中让幼儿体验到游戏的快乐就 尤为重要。本次活动是幼儿启发的我,园里的彩虹桥上有一个轮胎,孩子们很感兴趣 ,为了让更多的孩子参与活动,我设计了“会动的坦克”。孩子利用身体的各个部位 带动坦克的履带前进,方法要正确才会滚动的远,通过自由玩耍、幼儿互相交流,使 其在游戏中把学习潜能得以发挥。既发展了幼儿的身体协调性,又培养了幼儿的勇于 探索的精神。而这正符合纲要的“在游戏中学习,在学习中游戏”的精神。 活动目标: 1.培养身体的协调性,引导幼儿体验参加游戏的快乐。 2.帮助幼儿学习探索用身体带动某一物体,使物体动起来的方法。 活动准备:

废旧大纸箱若干,实物坦克,字卡“会动的坦克、履带、链轨”。 活动过程: 一.复习儿歌并表演《大轱辘车》 大轱辘车往上,上面有山怎么开;大轱辘车往下开,下面有河怎么开…… 二.步入主题: 今天老师带来一种车,他可以爬坡、过沟壑、过墙、涉水,你们知道是什么神奇的车 吗?----坦克(出示字卡) 三.出示实物: (1)出示坦克,它是怎么轱辘轱辘转的呢? (2)请幼儿学一学,坦克是怎么轱辘轱辘转的? (3)那他为什么会轱辘轱辘转呢? ----因为他有链轨也叫履带,(出示字卡“链轨、履带”)链轨转动起来坦克也就 动起来了。 (4)那生活中你还见过那些带有履带的车呢?----挖掘机、吸盘履带机、压路机 、起重机、吊车等等。 四.出示纸箱,让幼儿自由探索,让纸箱转动起来。 (1)今天老师给你们带来了好玩的东西,你们以前绝对没有玩过,想不想玩呢?那

用java做坦克游戏

第一次课 一、要做的工作 1、产生一个800*600的窗口,背景色为绿色。窗口可以被关闭,但不允许改变 大小 2、在窗口里画出一个红色的圆代表坦克 3、让坦克动起来 改变坦克的位置就相当于坦克移动了,因此首先需要把坦克的位置描述改为变量 每重画一次坦克就动一次,让坦克不断的动就要不断的重画,我们用线程来控制 二、知识点 1、使用eclipse建立项目,创建包和类的方法 2、变量命名规则:所有命名要求见名知义;类名首字母大小,变量和方法首字母小写;驼峰标识(比如类名:TankWar) 3、事件机制 ●事件包括三个方面:监听器类,注册事件,覆盖方法 ●监听器类经常写成内部类(包括匿名内部类)或是类本身实现事件接口 ●事件接口包括actionListener接口、窗口事件接口、鼠标事件接口、键盘事件 接口等等 ●使用事件接口要求把接口的所有方法都写出,但不一定都实现 ●窗口事件和鼠标键盘事件接口还提供了较为简洁的适配器类 3、匿名内部类 类可以分为如下几种: ●主类:包含主方法的类 ●内部类:在一个类内部定义的类为内部类 ?实例内部类:在一个类内部独立存在,不属于类的成员变量和方法 ?静态内部类:用static修饰的实例内部类 ?局部内部类:在一个类的方法内定义的类 ?匿名内部类:没有名字的局部内部类 ●外部类:包含内部类的类,外部类也可能是其他类的内部类 ●顶层类:不是任何类的内部类为顶层类

设计内部类的主要目标是“封装”。 ●顶层类只能用public修饰或者不修饰(即默认修饰方式),内部类可以用 public,protected,private,默认四种方式修饰,局部内部类只能用默认 修饰 ●局部内部类和匿名内部类只在方法内可见,即该类只为该方法提供服务 ●实例内部类只在一个类内可见,只为该类提供服务 4、利用eclipse重写父类的方法 在eclipse中单击右键,源代码,生成覆盖方法。此时会列出当前类的所有父类,当前类可以直接继承父类的方法。 5、图形的重画机制 在frame上画出的图形每次刷新时会重画,重画的过程是:系统自动调用repaint 方法,repaint调用update方法,update调用paint方法,从而完成重画。 6、多线程 见第17课详细讲解 三、小注 1、我们使用的Frame组件,没有使用JFrame,因为JFrame在后续画图时不好用,到时举例看 第二次课 一、要做的工作 1、让坦克在键盘的控制下向四个方向移动 2、我们已经写好一个坦克并且能够控制其移动,如果要求在加入一个坦克该如 何实现? 把坦克做成一个独立的类,把和坦克自身相关的属性和方法都写到坦克类中,然后在tankclient类中生成tank类的对象,然后用tanke类的对象调用坦克类的方法类完成各种功能 3、让坦克在键盘的控制下向八个方向移动 1、如何做出八个方向?通过四个方向键组合出八个方向,比如上、右同时按 下是一个方向。 2、四个布尔变量代表四个方向键的按下情况,组合出八个方向,八个方向用 枚举类型表示。 4、优化代码:把一些可能会改变的值定义成常量

经典游戏之坦克大战

编号:090619 审定成绩: 先锋软件学院2011届 毕业设计(论文) 题目:基于VC的俄罗斯方块 分院:软件分院 学生姓名:吕志亚 专业:电脑游戏 班级: 0906 学号: 200900008920 指导教师:易刚 填表时间:2011年12月

学生毕业设计(论文)工作自查表 (2011年11月- 2012年4月检查) 指导教师(签字):日期:年月日

先锋软件学院毕业论文(设计)评阅表 (指导教师、评阅人用) 评阅人:年月

摘要 俄罗斯方块是有史以来最伟大的游戏之一。它是永恒的娱乐经典,但它实际上又和那些传统的经典娱乐方式不同,因为它的本质是电子化的,所以它的确属于现代产物。俄罗斯方块举世闻名的游戏性,在该游戏新鲜出炉时就显得非常直观。某些与坠落的玩具碎片和它们的形状有关的东西,使得哪怕新手也会很自然地企图把它们排列起来,并加以适当组合,就好似俄罗斯方块触动了我们某些内在的感官,使得哪怕是我们当中最杂乱无章的人也要把事情整理妥当。 俄罗斯方块是一款风靡全球的掌上游戏机和PC机游戏,它造成的轰动与创造的经济价值可以说是游戏史上的一件大事。它由俄罗斯人阿列克谢? 帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。它看似简单却变化无穷,俄罗斯方块上手极其简单,但是要熟练地掌握其中的操作与摆放技巧,难度却不低。作为家喻户晓老少皆宜的大众游戏,其普及程度可以说是史上任何一款游戏都无法相比的。相信大多数人都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。 俄罗斯方块是个老幼皆宜的小游戏,它实现由四块正方形的色块组成,然后存储在一个数组的四个元素中,计算机随机产生不同七种类型的方块,根据计算机定时器控制它在一定的时间不停的产生,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作,(用信号和槽函数的关联来实现对按键事件的控制)。然后程序根据这七种方块堆叠成各种不同的模型。Qt是诺基亚开发的一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。论文描述了游戏的历史,开发此游戏的环境,游戏开发的意义。遵循软件工程的知识,从软件问题定义开始,接着进行可行性研究、需求分析、概要设计、详细设计,整个开发过程贯穿软件工程的知识体系。 此次设计在Linux系统下,以QT+Creator为开发语言,使用C++和QT库来进行游戏的设计与实现。 关键词:游戏设计;算法;数组;事件

《坦克大战》游戏策划方案讲课稿

《坦克大战》游戏策划方案 1 立项原因 a 根据原红白机的《坦克大战》,分析现行的类似游戏改编 b 独特的对抗性吸引更多的玩家体验乐趣 c 简单的操作性使本游戏更适合休闲娱乐 d 丰富道具,坦克同样可以吸引大型游戏的玩家 e 游戏针对人群是25岁及以下的玩家,但是游戏的简单和快速性使它同样适合工作间隙 的休闲娱乐 2 市场调查 略 3 游戏特色及玩点 a 游戏以卡通搞笑风格让玩家轻松游戏 b 对抗性强,让玩家充分体验网络对抗的刺激感觉 c 操作简单,方向+鼠标就可以完成游戏的所有基本操作 d 场景变化多样,满足玩家的新鲜感 e 游戏的多种道具不但有实用性还尽量提供玩家酷的感觉,满足玩家的成就感 4 游戏概述 a 游戏是以坦克为主角的多人网络对抗游戏 b 玩家可以组队也可以双人进行 c 游戏在一个选定的场景中进行 d 摧毁对方或者逼迫对方认输是游戏的胜利条件 5 游戏风格 a 游戏以2D卡通画面表现轻松搞笑得风格 b 在主体风格下,游戏体现多种场景 c 场景中为横板卷轴方式体现,侧视图效果 6 游戏规则 6.1 基本规则 a 玩家可以自由创建房间,一旦房间创建完毕,就必须满足房间人数才能开始游戏 b 死亡设定,创建房间时可以选定死亡不能重生或者死亡可在n秒后重生(10<=n<=60) c 胜利规则,创建房间时可以选择对方玩家全灭(死亡不能重生)或者摧毁对方指挥塔或

者n分钟后结束(5<=n<=60) d 游戏开始后按照房间的分配分成两方,在各自区域出生 e 双方各有一个弹药基地一旦摧毁将极大的降低本方的弹药填装速度 f 双方各有一个指挥塔,一旦摧毁如果游戏没有结束就会禁止本方玩家使用道具 g 玩家在游戏场景中不能穿过任何玩家坦克 h 玩家每击毁一辆敌对坦克就立即得到100游戏金币 i 玩家摧毁敌人弹药基地本方所有玩家就会立刻得到500金币 j 玩家摧毁敌人指挥塔本方所有玩家就会立刻得到1000金币 k 本方玩家不会伤害任何属于本方的物体或玩家 6.2 战斗方法及规则 6.2.1 行动点数 a 每名玩家都拥有最少10点的行动点数 b 移动或者开炮都需要消耗行动点数 c 行动点数为0则无法继续任何动作但是可以使用道具 d 行动点数消耗完可以等待自动恢复,也可以通过道具立即增加行动点数 6.2.2 弹药量 a 弹药量根据坦克炮塔不同会稍有不同但是具体数字玩家看不到 b 不同的武器对弹药的消耗量不同 c 弹药量不足时无法开炮 d 弹药量会随时间自动增加 6.2.3 开炮角度 a 开炮角度影响炮弹的飞行轨迹 b 开炮角度用Q、E调节,一次调节后游戏中不会自动变化,除非玩家继续调节

单机版坦克大战游戏的设计与实现

同组人:陈品孚赖永宁 1 可行性研究报告 1.1编写目的 (1) 1.2背景 (1) 1.3参考资料 (2) 2可行性研究的前提 (2) 2.1要求及目标 (2) 2.2开发环境 (2) 3系统和效益分析 (3) 3.1可行性分析 (3) 3.2 经济可行性 (3) 4结论 (3) 1.1编写目的 随着社会的进步,现在人们工作的压力越来越大,休息的时候很少,为了让疲惫的心灵得以休息,开发了坦克大战的小游戏来让玩家轻松一会,该游戏操作十分简单,只要操作键盘上的方向键按住攻击键就可以玩该游戏,轻松享受玩游戏的喜悦,可操作性好,而且不会使玩家沉溺于该游戏,对玩家的学习和工作都起积极的作用。 说明编写本可行性研究报告的目的,指出预期的读者。 1.2背景 国内外单机游戏的研究现状 近年来,因特网在国内迅速普及,导致了网络游戏的高速发展。单机游戏市场呈现爆炸式的发展。尤其是国内外巨大的个人电脑拥有量,更是让商家看到了商机,手机游戏市场利润将会十分丰厚。面对潜力如此巨大的单机游戏市场,各游戏开发商、电脑生产厂商等都纷纷开始了各自的应战准备,以便抢占商机。由于大部分人都对电脑操作都不是很熟悉,所以对于操作负责的网络游戏的推广有一定的影响,而单机游戏凭借自身操作简单、收费低廉、对电脑要求较低、有益身心等优点而较好推广,对于我国单机游戏而言,还处于起步阶段,有着较大的商业潜力,但是也存在着正版保护意识不强、利润较低等不利因素,还需要进一步的发展。 该游戏是一款以黑白机为平台的平面操作射击游戏,1名玩家可控制自己的坦克进行移动和射击,以保护总部为前提,歼灭对方为胜利目标。每个关卡的地形不同,玩家可利用各种地形对敌人进行打击,并会得到补给。两人配合游戏时,每一关都有不一样的战术,以便能顺利完成关卡目标,对于玩家来说大大加强了游戏乐趣。其操作简单且娱乐性强,是一款男女老少皆宜的游戏。游戏附带地图编辑器,玩家可自行编辑地图进行游戏。游戏中的众多经典

《坦克大战》快速过关攻略及高分技巧大全

《坦克大战》快速过关攻略及高分技巧大全《坦克大战》(T ank Battle)是一款由divmob games发行的十分好玩的坦克射击类游戏。这款全新而又经典的坦克大战大家肯定没有体验过。游戏画面十分酷炫,且玩法与普通的坦克游戏有所不同,这款游戏通过虚拟摇杆操作,我们要操控坦克在地面上行进的同时不断扫射天空中袭来的战机。我们还可以给这个钢铁怪物装备上激光炮、霰弹炮、火箭炮等强力武器来提升自己的战力,去跟众多强劲的BOSS进行火力的较量。今天小编就为各位看官带来这款游戏的快速通关技巧以及高分攻略大全。 游戏热度:8.0 更新时间:2014-03-01 游戏版本:1.0.5 语言:英文 过关技巧: 1、购买武器。要快速过关必须要提高战斗力,在坦克大战游戏中我们一定要尽快购买导弹这个武器,并且升级。因为导弹这类型的火炮与其他的火炮不同,它可以攻击坦克后方的敌人,是我们打击敌人的可靠保证。

2、坦克最佳位置。购买了导弹之后,我们就可以在游戏当中同时攻击前后方的敌人啦。这样有什么好处呢?那就是让我们在游戏当中,让坦克处于下图中的位置,我们就能在左右两边的敌人刚出现的时候就将它们击落,让它们没有任何开火的机会,确保我们轻松过关。 就像图片里的坦克这样,主炮能够攻击前方的敌人,火箭能够攻击后面的敌人,在敌人刚出现的时候就将其消灭,这样坦克的上方全是朗朗晴空,我们就能轻松过关啦。 3、合理利用核武器。如果得到了核武器,一定不要存太久,要找好机会发射核武器清空整个屏幕上所有的敌人。因为核武器的数量不会累积的,如果不发射的话,下一次得到核武器可就浪费了呢。

高分攻略: 首先,要注意我们坦克的走位,不能总是停留在同一个地方,要操控你的坦克在屏幕下方左右移动。 因为飞机的导弹大多都是跟踪的,所以要如何躲避跟踪弹非常重要,否则一被导弹击中,那么连击可就断了,刷出高分连击可就遥遥无期啦! 最好的办法就是控制我们的坦克在屏幕下方左右移动,左下角和右下角是最安全的地方。

坦克大战的游戏代码

using System; using System.Collections.Generic; using System.Text; using System.Drawing; //add using System.Collections;//add namespace 坦克 { class Tank { private int width; //坦克的宽度 private int height; //坦克的高度 private int top; //坦克位置的纵坐标 private int left; //坦克位置的横坐标 private int type; //坦克的类型(2---5敌方,6己方) private int direct; //0--上,1--下,2--左,3--右 public ArrayList bList=new ArrayList();//子弹序列 public Tank(int tank_type)//构造函数 { Random r = new Random(); this.direct = r.Next(0, 4);//产生0—3的数 this.width = 32; this.height = 32;

this.left = r.Next(0, 1);//产生0—9的数 this.top = r.Next(0, 1);//产生0—9的数 this.type = tank_type; } public int Top//Top属性 { get { return top; } set { if (top >= 0 && top <= 9) { top = value; //if (top == 0 || top == 9) newDirect(); } } } public int Type//坦克的类型属性 { get

C#坦克游戏详细讲解

本游戏主要分4个内容讲解: 1、设计坦克类 2、设计子弹类 3、设计音乐类 4、设计窗体类 通俗易懂,希望对广大的学生们都有帮助欢迎下载 技术qq 1278263100 邮箱1278263100@https://www.doczj.com/doc/8b12229471.html, 游戏所需图片 游戏运行界面如下图:

1、设计坦克类: 新建一个类文件tank.cs (代码加注释如下) using System; using System.Collections.Generic; using System.Text; using System.Drawing; //add using System.Collections;//add namespace 坦克 { class Tank { private int width; //坦克的宽度 private int height; //坦克的高度 private int top; //坦克位置的纵坐标 private int left; //坦克位置的横坐标 private int type; //坦克的类型(2---5敌方,6己方) private int direct; //0--上,1--下,2--左,3--右 public ArrayList bList=new ArrayList();//子弹序列 public Tank(int tank_type)//构造函数 {

Random r = new Random(); this.direct = r.Next(0, 4);//产生0—3的数 this.width = 32; this.height = 32; this.left = r.Next(0, 10);//产生0—9的数 this.top = r.Next(0, 10);//产生0—9的数 this.type = tank_type; } public int Top//Top属性 { get { return top; } set { if (top >= 0 && top <= 9) { top = value; //if (top == 0 || top == 9) newDirect(); } } } public int Type//坦克的类型属性 { get { return type; } set { if (top >= 1 && top <= 5) { type = value; } } } public int Left//Left属性 { get { return left; } set

非常有用的解决坦克世界游戏掉线的方法

解决坦克世界掉线的方法 在玩坦克世界的游戏中遇到掉线的情况应该如何去处理,很多朋友遇到该情况后都不知道怎么解决,那我说一些简单的处理方法。 游戏掉线了,先找到掉线的原因,一般掉的原因有: 1、网络问题 2、游戏与软件兼容性 3、游戏服务器 4、多人共用网络 5、游戏客户端问题 一、网络 使用的网络不稳定是比较常见的游戏掉线情况。在网络比较好的情况下玩游戏很顺畅,但在网络慢下来,出现波动就会出现游戏卡、掉线等情况发生。 解决方法:有可能是你本身使用的网络运营商网络本来就不稳定,这个是无法控制的,可以先试试重启猫或者路由器等上网设备试试。经常出现不稳定的情况下还是建议增加带宽或者更换好点的网络运行商使用。也有可能是因为自己的网络IP没有固定,固定下IP尝试。 二、游戏与软件兼容性 有时候游戏掉线是因为下载了某款软件与你的游戏不兼容导致的掉线。 解决方法:查看游戏是否有保护系统,一般都会说明与什么软件不兼容,卸载不兼容的软件,重新启动电脑试试。

三、游戏服务器 游戏服务器的原因导致游戏掉线,这种情况是比较常见的。游戏商使用的服务器不稳定、拥堵等情况都会出现掉线的情况。 解决方法:可以联系游戏商反映或者使用一款迅游来解决 四、多人共用网络 网络使用的人比较多,比如:在出租房这种环境下多人共用一根网络,由于使用网络的人数太多了,导致一会有网一会没网,然后就会游戏掉线。 解决方法:可以设置路由器限制其他人的带宽,或者避免用网高峰期进行游戏。如果是经常游戏的朋友,还是建议单独使用一根网络使用。 五、游戏客户端问题 游戏客户端自身的原因导致掉线,比如游戏客户端出现BUG,游戏就会自己掉线。 解决方法:可以先修复游戏试试。或者重新下载游戏客户端进行安装。安装时候需要注意安装的盘符需要有足够大

中班体育游戏小小坦克兵

中班体育游戏小小坦克兵 中班体育游戏:小小坦克兵 游戏目标: 1.练习两人或多人合作协调地手膝着地爬。提高四肢肌肉力量。发展 身体运动的协调性。 2.能通过喊口令、数节奏等办法,控制自己的速度。与同伴保持同样 的节奏。 3.体验与同伴共同合作的乐趣。 游戏准备: 1.准备:把较大的纸箱拆去底和盖,做成“坦克”,凳子。 3.预先布置好场地。 游戏过程: 1.老师带领幼儿到游戏场地,排好队

形,共同做热身活动。 2.老师讲述游戏规则:将小朋友分成两组,两人为一小组。一人钻到纸箱里当“坦克”,通过手膝运动让“坦克“做前进运动,另一人当指挥员,发出“向左”“向右”“向前”的方向指示,两人合作到达凳子的摆放地时,角色互换,当“坦克”的小朋友做指挥员,原先的指挥员做“坦克”,两人合作到达起点,下一组得小朋友接着做相同动作。先轮完的小组为胜利小组。 3.请理解游戏玩法的小朋友做示范,其他小朋友观看,同时将规则再重复一遍,强调不能出现的违反规则的行为,强化记忆。 4.让小朋友们找个“好朋友”,将他们两两配对,所有小朋友分成两组。开始游戏。 5.游戏结束,给胜利的和失利的小朋友都鼓掌,并作游戏总结。 活动建议: 1.教学变式:在“开坦克”的活动过程

中,维持等待着的小朋友的秩序; 2.注意幼儿安全。 游戏反思: 我这次的游戏叫“小小坦克兵”。这个游戏的教案是我在网上搜查到的,到了幼儿园与老师校对后才发现我的教案写错了。先前写的游戏教案难度不适合中班小朋友,只好作罢,临时换成了老师原先准备的教案。这也使得我准备方面有些不足和仓促。 由于天气原因我们的游戏场地换成了多媒体教室。在我将小朋友带到场地时,按原本想法将他们面朝着我排成一排,但是我没有估计到室内环境的局限性,而且小朋友来的比较多,根本没有办法排成一整排。我临时把小朋友的队形改成矩形,可是问题来了,即使我将他们的位置安排好,但小朋友不知道怎样是“矩形排列”,自己在那和身边的小朋友玩起来,不管队形,最后我们的队形不像矩形,倒成了一个不规则的圆形。小朋友在期间十分闹腾,安顿他们花了

坦克世界新手前期速成攻略 经典

一、分房篇 知己知彼方能制敌,新手首先要了解的是分房规则。进入战斗时是电脑随机分房,其中分房规则为。1-2级车房;1-3级车房(2级火炮TD房)2-4级车房(机率低);3-5级车房;3-6级车房(机率低)4-7级车房;4-8级车房(机率低);4-9级车房(不是没有过)。 总结上面分房情况,出现最多的房有两种,1-2级车房,3-5级车房,1-2好混,3-5级房有火炮要小心火炮。4级车以后基本进大班,所以进入后更要小心。 二、战车篇 如果你打了一坦克10炮他还一滴血没费,恭喜你遇到BOSS了。每个房都会随后分来1-3个BOSS,这些房间的顶级车通常都要吃肉的,新人见了一定要小心应对。 1-2级房BOSS并不特别变态,像D国金车PzKpfw 38H735 (f)在1-2级房里正面基本无敌,唯一能打得动他的1级车,只有S国的MS-1完整体,但是穿透机率真也不是特别高。对付PzKpfw 38H735 (f)就是必开他倾角好的正面,用3.7MM炮攻击他平整的侧面车身,如果你只装了一般的机关炮,请不要轻易接近这个晓BOSS。

1-2级房里除PzKpfw 38H735 (f)这样的不坏金刚以外,还有像BT-2那样的凶狠猎手。干爹车神马都给力,这句话真不是随便说的。1级MS-可以装3级4.5MM的炮试问谁能受得了。而BT-2所使用的致命武器确不是这个。而是37mm ZiS-19,这门炮标准穿透力是58,完全无视1-2级房所车的装甲。但是火炮凶猛并不是BT2被称作猎手的唯一原因,除此之外BT-2还有着车身低矮、着弹面小、行进间射击的稳定,近距攻击对方车身易于苗准等优点。总之,这种接近于T-34的车体设计理念带来的优势,已经使其远远超出同级古董车。如果你用心的去了解BT-2,你就是BOSS。 1-2级房里还有一些小给力,如D国的35t正面炮塔和车身装甲都有25,完全可以免疫一般机关炮,3.7MM也很给力,能打穿90%1-2级车,是LZ的最爱;D国2号有着2级车里最厚的正面装甲35,只能使用机关炮,随然只能用机关炮,但是LZ认为该车最大问题不在于火炮口径,而是因为其硕大的观察观正好设在炮塔的正中,这样就使得强大的35MM装甲形同虚设,几呼所有3. 7MM炮都可以轻易打穿他。S国T26有着跟兄弟BT-2一样的火炮,只机动力和稳定性不如BT-2,战斗力大打折扣。M国中坦T2,2级车就有中型,M国就是不要脸。良好的装甲22,可以免疫初级机关炮,良好的火炮,良好机动,良好的视野,不过神马都良好的结果只能什么都不突出,改许在高手手中他是神器,但LZ不见意新手使用。M国神车,T2轻坦,最适合,狂野一族和极限选手使用,71KM的速度堪比跑跑坦克车,装载2.0MM机关炮,可以保证高速行进间命中目标,使用机关炮的好处就是,不求枪枪都命中,但是总有一发适合你。

相关主题
文本预览
相关文档 最新文档