文档库 最新最全的文档下载
当前位置:文档库 › C++大作业坦克大战

C++大作业坦克大战

C++大作业坦克大战
C++大作业坦克大战

#include

#include

#include

#include

#include

using namespace std;

HANDLE Mutex=CreateMutex(NULL,FALSE,NULL);//互斥对象

int GameOver=0;

int level=0;

int map[23][23];

//坦克种类,Normal为玩家坦克

#define Normal 0

#define Red 1

#define Blue 2

#define Green 3

//方向的宏定义

#define Up 0

#define Down 1

#define Left 2

#define Right 3

//地图标记的宏定义

#define Empty 0

#define Player 1

#define PlayerBullet 2

#define EnemyBullet 3

#define Enemy 4

int Kill;

int KillRed;

int KillGreen;

int EnemyExist;

void SetPos(int i,int j)//设定光标位置

{

COORD pos={i,j};

HANDLE Out=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorPosition(Out, pos);

}

void HideCurSor(void)//隐藏光标

{

CONSOLE_CURSOR_INFO info={1,0};

HANDLE Out=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorInfo(Out,&info);

}

int sharp[4][12]=

{

{0,1,1,0,1,1,1,2,2,0,2,2},

{0,0,0,2,1,0,1,1,1,2,2,1},

{0,1,0,2,1,0,1,1,2,1,2,2},

{0,0,0,1,1,1,1,2,2,0,2,1},

};//此数组用来保存坦克各个方向的形状信息

DWORD WINAPI Bulletfly(LPVOID lpParameter);//子弹函数申明

void Updata();//更新界面信息函数申明

class Tank//坦克类

{

private:

int Direction;//方向

int hotpoint[2];//活动点

int Speed;//速度

int FirePower;//火力

public:

Tank(int dir,int hot1,int hot2,int typ,int spe,int firepow)//构造函数{

Direction=dir;

hotpoint[0]=hot1;

hotpoint[1]=hot2;

Type=typ;

Speed=spe;

FirePower=firepow;

}

int Type;//坦克的种类(详见宏定义)

int ID;//坦克在MAP中的标记(详见宏定义)

int FireEnable;//是否可以开火

int Life;//生命值

void Running();//运行函数

int Judge(int x,int y,int ID);//判断是否可以绘制坦克

void DrawTank();//重绘坦克

void Redraw();//擦除坦克

int GetSpeed()//获取速度

{

return Speed;

}

int GetFire()//获取火力

{

return FirePower;

}

int GetDirection()//获取方向

{

return Direction;

}

int GetHotX()//获取活动点坐标

{

return hotpoint[0];

}

int GetHotY()

{

return hotpoint[1];

}

void IncreaseFire()//火力+

{

FirePower++;

}

void IncreaseSpeed()//速度+

{

Speed++;

}

void ChangeDirection(int newD)//改变方向

{

Direction=newD;

}

void ChangePos(int x,int y)//改变活动点

{

hotpoint[0]=x;

hotpoint[1]=y;

}

};

Tank player(Right,0,0,Normal,1,1);//玩家

Tank enemy(Left,20,0,Red,1,1);//敌人

void Tank::DrawTank()//绘制坦克

{

int i;

int nx,ny;

if(Type==Red)

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED);

else if(Type==Blue)

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_BLUE);

else if(Type==Green)

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_GREEN);

else if(Type==Normal)

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);

for(i=0;i<6;i++)

{

nx=hotpoint[0]+sharp[Direction][i*2];

ny=hotpoint[1]+sharp[Direction][i*2+1];

SetPos((ny+1)*2,nx+1);//利用sharp数组相对于点x,y绘制形状

map[nx][ny]=ID;

cout<<"■";

}

}

void Tank::Redraw()//擦除坦克,原理同上

{

int i;

int nx,ny;

for(i=0;i<6;i++)

{

nx=hotpoint[0]+sharp[Direction][i*2];

ny=hotpoint[1]+sharp[Direction][i*2+1];

map[nx][ny]=Empty;

SetPos((ny+1)*2,nx+1);

cout<<" ";

}

}

int Tank::Judge(int x,int y,int dir)//判断当前是否可以绘制坦克

{

int i;

int nx,ny;

for(i=0;i<6;i++)

{

nx=x+sharp[dir][i*2];

ny=y+sharp[dir][i*2+1];

if(nx<0||nx>=23||ny<0||ny>=23||map[nx][ny]!=Empty)//不能绘制,返回1 return 1;

}

return 0;

}

void Tank::Running()//坦克运行函数

{

int newD;

//坦克的运行

while(1)

{

if(Life==0)

{

EnemyExist=0;//敌人不存在

return;

}

if(GameOver==1)

return;

if(FireEnable==1&&GameOver==0)//如果可以开火

{

WaitForSingleObject(Mutex,INFINITE);//线程拥有互斥对象

FireEnable=0;//设为不可开火

HANDLE bullet=CreateThread(NULL,0,Bulletfly,&ID,0,NULL);//创建子弹线程

CloseHandle(bullet);

ReleaseMutex(Mutex);//释放互斥对象

Sleep(100);

}

WaitForSingleObject(Mutex,INFINITE);//线程拥有互斥对象

srand((int)time(0));

newD=rand()%4;

if(newD==Up)//随机出新的方向并重新绘制坦克

{

Redraw();

if(Judge(hotpoint[0]-1,hotpoint[1],newD)==0)

{

hotpoint[0]--;

Direction=newD;

}

else

{

if(Judge(hotpoint[0],hotpoint[1],newD)==0)

Direction=newD;

}

}

else if(newD==Down)

{

Redraw();

if(Judge(hotpoint[0]+1,hotpoint[1],newD)==0)

{

hotpoint[0]++;

Direction=newD;

}

else

{

if(Judge(hotpoint[0],hotpoint[1],newD)==0)

Direction=newD;

}

}

else if(newD==Left)

{

Redraw();

if(Judge(hotpoint[0],hotpoint[1]-1,newD)==0)

{

hotpoint[1]--;

Direction=newD;

}

else

{

if(Judge(hotpoint[0],hotpoint[1],newD)==0)

Direction=newD;

}

}

else if(newD==Right)

{

Redraw();

if(Judge(hotpoint[0],hotpoint[1]+1,newD)==0)

{

hotpoint[1]++;

Direction=newD;

}

else

{

if(Judge(hotpoint[0],hotpoint[1],newD)==0)

Direction=newD;

}

}

if(GameOver==0&&Life!=0)

DrawTank();

ReleaseMutex(Mutex);//释放互斥对象

Sleep(500-80*Speed);

}

}

/*********************子弹线程函数*******************/ DWORD WINAPI Bulletfly(LPVOID lpParameter)

{

int *ID=(int *)lpParameter;//ID用来获取发射子弹坦克的ID

int Pos[2];//子弹活动点

int direction;

int Speed;

int type;

int hit=0;//击中标记

int oldx,oldy;//旧活动点

int flag=0;//子弹是否有移动的标记

if(*ID==Player)//如果是玩家坦克

{

type=PlayerBullet;

direction=player.GetDirection();

Speed=player.GetFire();

Pos[0]=player.GetHotX();

Pos[1]=player.GetHotY();

}

else if(*ID==Enemy)//如果是敌人坦克

{

type=EnemyBullet;

direction=enemy.GetDirection();

Speed=enemy.GetFire();

Pos[0]=enemy.GetHotX();

Pos[1]=enemy.GetHotY();

}

if(direction==Up)//根据坦克的位置和方向确定子弹的初始坐标{

Pos[0]--;

Pos[1]++;

}

else if(direction==Down)

{

Pos[0]+=3;

Pos[1]++;

}

else if(direction==Left)

{

Pos[0]++;

Pos[1]--;

}

else if(direction==Right)

{

Pos[0]++;

Pos[1]+=3;

}

//子弹的运行

while(1)

{

WaitForSingleObject(Mutex,INFINITE);//这个不再注释了。。。。。

if(flag==1&&hit!=1)//擦除原位置

{

map[oldx][oldy]=Empty;

SetPos((oldy+1)*2,oldx+1);

cout<<" ";

}

if(GameOver==1)

return 0;

if(hit==1||Pos[0]<0||Pos[0]>22||Pos[1]<0||Pos[1]>22)//如果击中

{

ReleaseMutex(Mutex);

Sleep(500);

if(type==PlayerBullet)

player.FireEnable=1;

else if(type=EnemyBullet)

enemy.FireEnable=1;

break;

}

switch(map[Pos[0]][Pos[1]])//子弹经过的MAP的标记

{

case Empty://如果是空位置就绘制子弹

map[Pos[0]][Pos[1]]=type;

SetPos((Pos[1]+1)*2,Pos[0]+1);

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);

cout<<"■";

break;

case Player://如果是玩家位置

if(type!=PlayerBullet)

{

player.Life--;//生命减少

if(player.Life<=0)

GameOver=1;

}

Updata();

hit=1;

break;

case Enemy://如果是敌人位置

if(type!=PlayerBullet)

hit=1;

else

{

hit=1;

Kill++;

if(Kill%20==0&&player.Life<5)//击杀数++

player.Life++;

if(enemy.Type==Red)//如果击杀红坦克

{

KillRed++;

if(KillRed%10==0&&player.GetFire()<5)

player.IncreaseFire();

}

if(enemy.Type==Green)///如果击杀绿坦克

{

KillGreen++;

if(KillGreen%10==0&&player.GetSpeed()<5)

player.IncreaseSpeed();

}

enemy.Redraw();//擦除敌人

enemy.Life=0;//敌人死亡

}

Updata();

break;

}

oldx=Pos[0];

oldy=Pos[1];

if(direction==Up)//子弹移动

Pos[0]--;

else if(direction==Down)

Pos[0]++;

else if(direction==Left)

Pos[1]--;

else if(direction==Right)

Pos[1]++;

ReleaseMutex(Mutex);

flag=1;

Sleep(60-10*Speed);

}

return 0;

}

/*************************敌人线程函数***************************/ DWORD WINAPI TankRuning(LPVOID lpParameter)

{

Sleep(400);

int Pos;

int Start[2];//敌人起始地址

int typ;

int fire;

int spe;

while(1)

{

if(GameOver==1)

return 0;

srand((int)time(0));//随机出敌人起始地址

Pos=rand()%4;

if(Pos==0)

{

Start[0]=2;

Start[0]=2;

}

else if(Pos==1)

{

Start[0]=2;

Start[1]=18;

}

else if(Pos==2)

{

Start[0]=18;

Start[1]=2;

}

else if(Pos==3)

{

Start[0]=18;

Start[1]=18;

}

if(player.Judge(Start[0],Start[1],Down)==0)

break;

}

WaitForSingleObject(Mutex,INFINITE);

srand((int)time(0));

typ=rand()%3+1;//随机出敌人的种类

if(typ==Blue)

{

spe=1+level;

fire=1+level;

}

else if(typ==Red)

{

spe=1+level;

fire=3+level;

}

else if(typ==Green)

{

spe=3+level;

fire=1+level;

}

enemy=Tank(Down,Start[0],Start[1],typ,spe,fire);//重新生成敌人坦克enemy.ID=Enemy;

enemy.Life=1;

enemy.FireEnable=1;

ReleaseMutex(Mutex);

enemy.Running();

return 0;

}

void Init()//初始化函数

{

Kill=0;

KillRed=0;

KillGreen=0;

player=Tank(Left,0,0,Normal,1,1);

enemy=Tank(Left,0,0,Red,1,1);

player.Life=2;

player.FireEnable=1;

enemy.Life=0;

enemy.FireEnable=1;

player.ID=Player;

enemy.ID=Enemy;

EnemyExist=0;

}

void Updata()//更新界面信息

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);

int i;

SetPos(53,0);

cout<<"生命值:";

SetPos(53,1);

for(i=0;i<5;i++)

{

if(i

cout<<"■";

else

cout<<" ";

}

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_GREEN);

SetPos(53,3);

cout<<"移动速度:";

SetPos(53,4);

for(i=0;i<5;i++)

{

if(i

cout<<"■";

else

cout<<" ";

}

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED);

SetPos(53,5);

cout<<"火力:";

SetPos(53,6);

for(i=0;i<5;i++)

{

if(i

cout<<"■";

else

cout<<" ";

}

SetPos(53,8);

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);

cout<<"杀敌数:"<

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED);

SetPos(53,9);

cout<<"杀死红坦克:"<

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_GREEN);

SetPos(53,10);

cout<<"杀死绿坦克:"<

}

void DrawMap()//画界面

{

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);

system("cls");

int i;

for(i=0;i<25;i++)

{

SetPos(i*2,0);

cout<<"■";

}

for(i=1;i<25;i++)

{

SetPos(0,i);

cout<<"■";

SetPos(24*2,i);

cout<<"■";

}

for(i=0;i<25;i++)

{

SetPos(i*2,24);

cout<<"■";

}

Updata();

}

void Welcome()//欢迎界面

{

int x;

system("cls");

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);

SetPos(10,5);

cout<<"■■■■■■■■■■■■■■■■■■■■■■■■";

SetPos(10,6);

cout<<"■坦克大战控制台版■";

SetPos(10,7);

cout<<"■■■■■■■■■■■■■■■■■■■■■■■■";

SetPos(10,8);

cout<<"■方向键移动,空格键射击■";

SetPos(10,9);

cout<<"■敌人分为3种,蓝色为普通敌人■";

SetPos(10,10);

cout<<"■红色敌人高射速,绿色敌人高机动性■";

SetPos(10,11);

cout<<"■每杀死10个红坦克,玩家射速提高(最高五级)■";

SetPos(10,12);

cout<<"■每杀死10个绿坦克,玩家移动性提高(最高五级)■";

SetPos(10,13);

cout<<"■每杀死20个坦克,玩家生命+1(最高五格)■";

SetPos(10,14);

cout<<"■■■■■■■■■■■■■■■■■■■■■■■■";

SetPos(10,15);

cout<<"■何某作(百度ID:HapHapYear)■";

SetPos(10,16);

cout<<"■按1-3选择难度■";

SetPos(10,17);

cout<<"■■■■■■■■■■■■■■■■■■■■■■■■";

while(1)

{

x=getch();

if(x<='3'&&x>='1')

break;

}

level=x-'0'-1;

}

int main()

{

Init();

HideCurSor();

Welcome();

DrawMap();

HANDLE temp;

int newD;

player.DrawTank();

while(GameOver==0)

{

if(GetAsyncKeyState(VK_UP))//按键上

{

WaitForSingleObject(Mutex,INFINITE);

newD=Up;

player.Redraw();

if(player.Judge(player.GetHotX()-1,player.GetHotY(),newD)==0)//移动玩家坦克,原理和敌人函数一样

{

player.ChangePos(player.GetHotX()-1,player.GetHotY());

player.ChangeDirection(newD);

}

else

{

if(player.Judge(player.GetHotX(),player.GetHotY(),newD)==0)

player.ChangeDirection(newD);

}

if(GameOver==0)

player.DrawTank();

ReleaseMutex(Mutex);

Sleep(200-player.GetSpeed()*20);//按键延迟,决定玩家坦克的速度}

else if(GetAsyncKeyState(VK_DOWN))//按键下,同上

{

WaitForSingleObject(Mutex,INFINITE);

newD=Down;

player.Redraw();

if(player.Judge(player.GetHotX()+1,player.GetHotY(),newD)==0)

{

player.ChangePos(player.GetHotX()+1,player.GetHotY());

player.ChangeDirection(newD);

}

else

{

if(player.Judge(player.GetHotX(),player.GetHotY(),newD)==0)

player.ChangeDirection(newD);

}

if(GameOver==0)

player.DrawTank();

ReleaseMutex(Mutex);

Sleep(200-player.GetSpeed()*20);

}

else if(GetAsyncKeyState(VK_RIGHT))//按键右,同上

{

WaitForSingleObject(Mutex,INFINITE);

newD=Right;

player.Redraw();

if(player.Judge(player.GetHotX(),player.GetHotY()+1,newD)==0)

{

player.ChangePos(player.GetHotX(),player.GetHotY()+1);

player.ChangeDirection(newD);

}

else

{

if(player.Judge(player.GetHotX(),player.GetHotY(),newD)==0) player.ChangeDirection(newD);

}

if(GameOver==0)

player.DrawTank();

ReleaseMutex(Mutex);

Sleep(200-player.GetSpeed()*20);

}

else if(GetAsyncKeyState(VK_LEFT))//按键左,同上

{

WaitForSingleObject(Mutex,INFINITE);

newD=Left;

player.Redraw();

if(player.Judge(player.GetHotX(),player.GetHotY()-1,newD)==0)

{

player.ChangePos(player.GetHotX(),player.GetHotY()-1);

player.ChangeDirection(newD);

}

else

{

if(player.Judge(player.GetHotX(),player.GetHotY(),newD)==0) player.ChangeDirection(newD);

}

if(GameOver==0)

player.DrawTank();

ReleaseMutex(Mutex);

Sleep(110-player.GetSpeed()*10);

}

else if(GetAsyncKeyState(VK_SPACE))//按键空格,发射子弹

{

WaitForSingleObject(Mutex,INFINITE);

if(player.FireEnable==1)//如果可以发射

{

HANDLE bullet=CreateThread(NULL,0,Bulletfly,&(player.ID),0,NULL);//创建玩家子弹进程

CloseHandle(bullet);

player.FireEnable=0;

}

ReleaseMutex(Mutex);

}

if(EnemyExist==0&&GameOver==0)//如果敌人不存在生成新敌人

{

WaitForSingleObject(Mutex,INFINITE);

EnemyExist=1;

temp=CreateThread(NULL,0,TankRuning,NULL,0,NULL);//创建敌人线程

CloseHandle(temp);

ReleaseMutex(Mutex);

}

}

system("cls");

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY| FOREGROUND_BLUE);

SetPos(20,10);

cout<<"游戏结束"<

SetPos(20,11);

cout<<"杀敌数:"<

SetPos(20,12);

cout<<"杀死红坦克"<

SetPos(20,13);

cout<<"杀死绿坦克"<

return 0;

}

10 C语言课程设计_坦克大战(提高篇)

C语言课程设计--坦克大战 一、游戏介绍 玩家坦克与敌方坦克在街道中进行巷战,玩家坦克被击中、玩家指挥部被击中或游戏时间到,一局游戏结束。 二、实验目的 综合应用C语言知识和设计知识开发一款小游戏。 三、实验内容 初始界面如下图。 按下空格键后游戏开始,“空格开始”消失,载入地图,并把玩家坦克设置在指挥部左侧。 游戏时间到,比如30秒,玩家坦克被敌方坦克摧毁,或者玩家指挥部被摧毁,一局游戏结束,游戏回到初始界面,并显示上一局的分数。 游戏区域为下图中最内部的黑色区域,左上角坐标[-26, -22],右下角坐标为[26, 22]。墙为正方形,边长为4,坦克也是正方形,比墙略小一点。 玩家用WASD键控制坦克上、下、左、右运行,按J键开炮。玩家坦克碰到墙就停下来,需要调转方向才能继续前进。玩家坦克开炮,一炮就能摧毁一块墙,或者一辆敌方坦克。玩家没摧毁一辆敌方坦克,加1分。 玩家指挥部被坦克或者炮弹(不管玩家还是敌方)碰上,都会被摧毁。 每隔几秒钟,比如3秒,就会产生一辆敌方坦克。敌方坦克每隔一段时间,比如1秒,就自动开炮。敌方坦克遇到墙就会停下来。停下来的坦克,前方的墙如果被摧毁了,又能继续前进。每隔几秒钟,比如2秒,敌方坦克就会顺时针变换一个方向前进。

四、实验准备 本实验中可能用到的C 语言标准库函数和FunCode API Stdio.h Math.h String.h

FunCode API

原图的角度 获得的旋转角度即为两张图片的

五、程序初步设计 如果程序规模比较小的时候,我们习惯一上手就写代码,边写边调整。但是当程序越来越大,代码越来越多的时候,如果我们还用这种方式编程,程序写到一半的时候,你可能会恨不得重写一遍。 此,我们在写代码之前,先把程序功能细化一下,并初步设计好程序结构,包括数据结构和自定义函数。有了比较清晰的思路以后,再开始开发程序。 在本项目中,我们要操作的对象有6个:玩家坦克、敌方坦克、玩家子弹、敌方子弹、墙、玩家指挥部。 其中,墙和指挥部都比较简单,主要是前4种,而且它们有共通性:名称、速度、位置,因此,可以考虑用一个结构体来表示。此外,我们需要用一种数据结构来管理它们。由于敌方坦克、子弹的数量都无法事先确定,所以我们选择链表而不是数组来管理它们。 struct Weapon{ char szName[128]; // 精灵名称 float fPosX, fPosY; // 精灵坐标 float fSpeedX, fSpeedY; // X和Y方向上速度 float fFireTime; // 敌方坦克距下一次开炮的剩余时间 int iHp; // 生命值 int iDir; // 朝向:0 - 上方;1 - 右方;2 - 下方;3 - 左方 int iType; // 类型: 0 - 我方坦克;1 - 敌方坦克;2 - 我方 // 子弹; 3 - 敌方子弹 Weapon* pNext; // 指向下一个节点的指针 }; 其中,iDir和iType用不同整数表示不同含义。如果在小程序中,我们可以在代码里直接调用这些整数,但是想象一下下面情况: 如果你连续写了三小时代码,你还能清晰记得1表示什么含义吗? 你时不时需要找到Weapon结构体定义查看这些数字的含义,然后再引用,出错的概率有多大? 如果你一不小心,在某处搞错了,比如要处理的是敌方坦克,你却引用2,需要多少时间才能把错误找出来? 因此,在做一个比较大的程序时,我们强烈建议用定义一个枚举类型,用我们熟悉的单词来表示这种数字的含义。 enum Direction{ UP = 0, // 上方 RIGHT = 1, // 右方 DOWN = 2, // 下方

坦克大战 实验报告

本科实验报告 课程名称:Java语言程序设计 实验项目:TankWar 实验地点:致远楼B403 专业班级:软件工程1219 学号:2012005496 学生姓名:柴丁方 指导教师:任少斌 2014年 1 月7 日

import java.awt.*; import java.awt.event.*; public class TankWarClient extends Frame { //构造游戏开始的界面 public void KaiShiJieMian() { this.setLocation(400,200); //游戏窗口的左上点在屏幕的位置 this.setSize(800, 600);//游戏窗口的尺寸 //使按窗口的“X”时,可以关闭程序

较上一次实验添加的代码段为: public void paint (Graphics g) { Color c = g.getColor();//color类是 java。awt 中的,因此可以直接 color c g.setColor(Color.green);// 类 java.awt.Graphics 中的方法,将此图形上下文的当前颜色设置为指定颜色。 g.fillOval(50, 50, 30, 30);//int x, int y,int width,int height,分别为坐标与椭圆的长宽 g.setColor(c); }

变更2: 较上一次实验添加的代码段为: 1.更改如下代码段中的“常量值”为“x”“y”,使所填充的椭圆位置可以随值改变,为静态的图形动起来打下了基础。 static int x=50,y=50;

项目坦克大战设计报告

《JA V A程序开发课程设计》项目设计 项目名称:TankWar 软件 专业:软件工程班级:13软工1班姓名:毛晨光学号:24 一、需求分析: 基本功能: 1.玩家控制的坦克能够四处移动并且打击敌方坦克; 2.敌方坦克能够随机四处移动并且打击玩家控制的坦克; 3.玩家控制的坦克拥有血量,而敌方坦克没有; 4.坦克受到攻击时血条会缩短; 5.敌方坦克被消灭完之后,提示游戏胜利; 6.用户方坦克被消灭后提示游戏结束; 特色功能: 1.坦克具有图片,不单单只是个圈圈。 2.增加了血包功能,地图上会随机出现一个血包,我方坦克开过会增加 血量。 二、系统设计: 类:实现游戏界面地图的初始化。 类:绘制和重绘功能。 :监听用户的键盘输入。 类:实现坦克的初始化,绘制,移动,发射等功能。 :实现敌方坦克的初始化,绘制,移动,发射等功能。 类:实现炮弹的初始化,绘制,移动,攻击功能。 类:实现爆炸的初始化。绘制功能,爆炸效果由绘制半径从小到大再到小的圆实现。 类:包含枚举。 类:用于实现血包的功能。 三、功能实现。 一.绘制地图功能: public class TankMap extends Frame{ tart(); }

制坦克功能:public class Tank { 方坦克的绘制方法 public class EnemyTank extends Tank{ 弹绘制方法public class Shell { ntersects())){

ntersects())){ "hittanks"); (false); =false; Explor ex=new Explor(x-3,y-3,; return true; } } return true; } }

funcode C++课程设计坦克大战

课程设计一坦克大战 一、游戏介绍 相信大部分同学都玩过或看过“坦克大战”这款经典游戏。现在,就由我们自己动手来开发它。只要大家具备了C++语言和面向对象的基础知识,然后按照实验指南的指导一步一步进行下去,相信我们每个同学都能把这款经典游戏做出来。 二、实验目标 综合运用C++及其面向对象的知识开发一款小游戏。 三、实验内容 在一个战场上,玩家控制坦克,消灭敌方坦克,并防止敌方坦克摧毁我方基地。游戏的具体要求如下: 1、游戏有一个初始页面,如下图。 2、按下任意键开始游戏,玩家控制坦克在战场上穿梭,碰到墙时,不能通过。 3、敌方坦克自由移动,每隔2秒改变一个方向,每隔3秒发射一发子弹。 4、敌方坦克每隔5秒出现一辆,从屏幕上方的左、中、右三个位置依次出现。 5、当玩家被消灭或者我方基地被摧毁或者游戏时间大于30秒的时候,游戏结束。 游戏开始前 进入游戏

四、游戏的整体框架 五、实验指南 实验准备 打开FunCode,创建一个新的C++项目。注意:项目名称必须为英文和数字,且不能有空格。 点击“项目”→“导入地图模板”,从对话框中选取名称为TankWar的模板导入。导入成功后,界面如下: 实验一游戏开始 【实验内容】 1、设置游戏标题 2、按空格键,提示图片消失,游戏进入开始状态. 【实验运行结果】 游戏开始前 按下空格键后 【实验思路】

按下空格键是键盘按下事件,可在CSystem::OnKeyDown函数中编写响应代码。为了保证程序结构的清晰、一致,更好的办法是在CGameMain类中添加一个相应的键盘按下事件处理函数,然后在CSystem::OnMouseClick函数中进行调用。 g_GameMain是CGameMain类的对象,它是全局变量,在程序运行时最先被创建。【实验指导】 1、C++程序的执行入口是主函数。FunCode的主函数名称叫WinMain,写在Main.cpp 文件中。CSystem::SetWindowTitle是设置程序运行窗口标题的函数,修改如下:CSystem::SetWindowTitle("坦克大战"); 2、参考CSystem::OnKeyDown函数,为CGameMain类创建一个OnKeyDown函数。 CGameMain类的头文件是LessonX.h文件,实现代码写在LessonX.cpp文件中。因此,先在LessonX.h文件对函数进行声明。函数的返回值和参数列表都与 CSystem::OnKeyDown函数保持一致。访问权限应该是public。代码如下: voidOnKeyDown(constintiKey,constboolbAltPress,constboolbShiftPress,cons tboolbCtrlPress); 3、接着,在Lesson.cpp文件中对该函数进行定义: voidCGameMain::OnKeyDown(constintiKey,constboolbAltPress,constboolbShif tPress,constboolbCtrlPress) { }

{JZ}怎样用C语言编写游戏231

如何用语言编写游戏 网络游戏是常谈的话题,是交互式娱乐的主力军,是一种高层次的综合艺术,更是一个民族的文化,世界观的全新传播方式作为游戏玩家的我们,是不是想设计一个属于自己的游戏呢? 爱玩是人的天性,而语言是我们计算机专业都要学习的一门基础学科.一般来说,是比较枯燥的.那么,我们能不能通过编一些小 游戏来提高它的趣味性呢?这样学习程序设计,就不会是一件坚韧 ,枯燥的事,它变得象电脑游戏一样充满好奇,富有乐趣.这正是 我要写这文档追求. , 总是从开始 学习编程的第一个程序,一般就是打印一个亲切的词语——" !".让我们来看看这个最简单的程序: <> *把输入输出函数的头文件包含进来* () { (", !")*在屏幕上输出字符串"!"* *退出函数,并返回* } 下面我们发现几个值得改进的地方,程序的运行结果一闪而过 ,每执行这个程序一次都能看见上次运行留下的字符,我们 还希望屏幕输出一个笑脸来欢迎我们.(大家不要小看了这个笑脸

曾经有人发贴专门问呢)让我们来改进一下这个程序吧! ,在语句的前面加一句 ();,表示按任意键结 束,在语句前用函数清屏,要使用这个函数和 函数,需要在程序开头再包含头文件码也有 许多非常好玩的字符,比如码值为的就是一个笑脸,我们可 以用("", )来输出一个笑脸. 现在我们把程序改成一个更好看的了.下 面让我们开始做游戏吧! , 心动的开始,一个运动中的笑脸 大家小时侯喜欢看动画片吗?哈哈,我猜你们都喜欢吧!下面就让我们来做一个小动画吧.在屏幕上显示一个运动的小笑脸,而且当它到达屏幕的边缘时会自动弹回来. 先在程序定义一个在屏幕中运动的点的结构: { , *该点的位置,包括坐标和坐标* , *该点在轴轴的速度* }; 运动的原理是,先擦去物体先前的轨迹,让物体按其速度移动一段距离,再画出该物体.让我们看到以下代码: (, )*把光标移到指定的坐标* (" ")*输出一个空格,把先前的字符擦去*

《面向对象的编程技术》课程设计实验报告

《面向对象的编程技术》课程设计实验报告 系计算机科学与技术 班级计114 姓名石险峰 学号119074122 指导教师胡增涛 计算机学院 2012年12月

一.应用程序的名称 设计:“坦克大战” (1)参考(《PC游戏编程(窥门篇)》谭文洪著)中的“坦克大战”(TankWar工程),并对其进行完善、扩充,程序要能看出专业水平和商业化产品的效果。 (2)要求:修改案例中“子弹可以穿透石头墙”的错误;增加上帝模式(无敌);修改一种敌军坦克,使之威力更大(要求坦克画面采用学生自己的头像)(需要重新编译资源包;之所以“改”而不是“增”,是因为同学们无法修改地图编辑器,另一个办法是在程序运行后动态加入);回答“坦克大战”指导书.doc(或pdf)和TankWar剖析.doc(或pdf)中带有蓝色《….?》标记的问题。 二.应用程序的设计目的 面向对象的编程技术》课程设计是一门独立开设的实验课程,旨在进一步强化学生对类、封装、继承、多态等面向对象基本概念的理解和OOP(面向对象编程)实际动手能力,并进一步拓展到OOD(面向对象设计)原则、技巧和初步的OOA(面向对象分析)方法。 在中国,电子游戏曾一度被大家斥为“电子海洛因”。然而电子游戏在青年学生中大受欢迎却又是一个不争的事实。正如水能载舟,亦能覆舟一样,任何事物都有其两面性。与其千方百计地封堵,还不如让同学们从技术的角度来研究它,这样既可以掌握复杂系统的设计技巧,也可以破除对电子游戏的神秘感。我相信,一个人如果自己能制作游戏,如果能清楚地知道那个绚丽多彩的虚拟世界背后无非就是一些类、变量、函数的话,他就不可能再沉迷于打游戏———与一堆对象、内存变量和函数较劲。同时,从技术上讲,游戏程序的开发异常复杂,能充分体现面向对象的拟人化思想和面向对象设计技巧。通过游戏程序的制作,可以帮助学生真正掌握面向对象程序设计的精髓。 三.应用程序简介 设计目的:C++电脑游戏开发:侧重利用面向对象的拟人化思想解决复杂问题和OOD技巧; 运行环境: 1.本设计采用Microsoft Visual C++6.0编译,并能够在WIN98,WIN2000下运行 2.游戏基于Windows Game Engine(WGE游戏引擎,添翼虎科技)(没提供源程序,不过不用担心,你可以把它看成是利用DirectX快速处理图片、声音、键鼠的类库) ,该引擎需要DirectX7.0 SDK支持(仅有Runtime运行库不够,必须包含开发语言需要的Header&Libs 头文件和库文件) 功能介绍: ○1修改案例中“子弹可以穿透石头墙”而且增加了敌军坦克子弹不能穿过 箱子:无论是敌军坦克还是玩家坦克的子弹都不能穿过石头,敌军坦克子弹不能透过箱子,一旦它们相碰撞子弹会自动销毁。 ○2增加上帝模式(无敌):玩家1通过按F1键变为上帝模式,再按一次,还原,一旦玩家进入上帝模式,敌军坦克的子弹对玩家坦克没任何损伤。 ○3修改火坦克的性能,使之威力更大,并且将该敌军坦克改为其他图像,通过更改火坦克的一些属性,使火坦克的子弹射程、威力,坦克的移动速

坦克大战课程设计论文

坦克大战游戏设计 1.课程设计的目的 随着手机的日益普及,java功能在移动设备上的实现及java 应用程序产生的影响力,对丰富人们的生活内容,提供便捷的咨询起着不可忽视的作用。本项目介绍了坦克大战的基本构建方法、java的相关技术及本程序的结构分析和具体功能的实现。游戏是在Eclipse3.2环境下编程。本项目重点运用了图形化用户界面GUI,Thread多线程的有关知识,其中涉及了绘图工具的运用,事件处理操作以及图形的碰撞检测等知识点。通过此课程设计,使学生巩固所学知识、培养学生动手能力,了解Java的面向对象的体系结构。学生用Java语言设计一个完整的应用程序,综合应用所学知识完成软件的分析、设计、调试和总结,提高学生对Java语言的综合应用能力和解决问题的能力。 2.设计方案论证 2.1设计思路 本项目介绍了坦克大战的基本构建方法、java的相关技术及本程序的结构分析和具体功能的实现。游戏是在Eclipse3.2环境下编程。 一、游戏基本元素:坦克,炮管,子弹,墙壁,地雷 二、它的主要功能: (1)能够朝四个方向移动:上、下、左、右键。 (2) 按下鼠标左键发射普通子弹;按下鼠标右键发射散弹;子 弹爆炸的效果,普通子弹和炮弹的效果 (3)敌人能够移动

(4)能够模拟爆炸 (5)能够产生障碍 (6)能够增长生命 玩家控制主坦克(上方有血条的)的移动以及炮弹的发射。若玩家将敌方坦克全部打掉则玩家胜;若期间由玩家控制的主坦克被打掉则视为玩家失败。游戏中只有普通墙作为障碍物,玩家无法穿越它们并且普通子弹不能将墙打穿 ;但是玩家可以用炮弹将普通墙打掉。桃心可以将坦克的血加满。 2.2简要的设计流程: 键盘监听器 2.2设计方法 2.2.1构建游戏主类

程序设计实训坦克大战实验报告材料

程序设计实训报告 坦克大战 专业班级:装控1401 实习时间:2015年7月10日至7月14日实习地点:微401 成员 1:赵振华 成员 2:许晨欢 成员 3:蒋绪涛

一、作品概述 1.1 创新点: 1、自定义并命名树林和钢板精灵,设置树林属性为不接受碰撞可以自由穿梭,钢板为接受任何碰撞但不做任何处理(即子弹和坦克均不能摧毁钢板)。 2、添加坦克发炮、击中目标和坦克移动的特殊声效。 1.2 概述: 这款游戏是我们QWER小组以经典90版坦克大战为背景制作的坦克大战的改编款,玩家通过控制坦克摧毁敌方坦克来保卫主基地不被摧毁。当敌我双方坦克相碰或己方基地被子弹摧毁时游戏结束(敌我双方子弹均可摧毁基地),每隔3秒钟出现一辆敌方坦克,游戏最大时长为100秒。此款游戏与经典90版坦克大战较为相似,操作简单,能唤起我们对童年的回忆。 二、功能设计 玩家坦克与敌方坦克在街道中进行巷战,玩家坦克被击中或与敌方坦克相撞、玩家指挥部被击中或游戏时间到,一局游戏结束。 按下空格键后游戏开始,“空格开始”消失,载入地图,100秒倒计时开始,并把玩家坦克设置在指挥部左侧。 游戏时间到,玩家坦克被敌方坦克摧毁,与敌方坦克相撞,或者玩家指挥部被摧毁,一局游戏结束,游戏回到初始界面,并显示上一局的分数。 玩家用W、A、S、D键控制坦克上、下、左、右运行,按J键开炮。坦克行进过程中有特殊声效,坦克发射或击中目标都有相应的声效。玩家坦克碰到墙和钢板就停下来,需要调转方向才能继续前进。玩家坦克开炮,一炮就能摧毁一块墙或者一辆敌方坦克,但不能摧毁钢板,玩家可穿梭于树林中。玩家每摧毁一辆敌方坦克,加1分。 玩家指挥部被坦克或者炮弹(不管玩家还是敌方)碰上,都会被摧毁。 每隔3秒钟,就会产生一辆敌方坦克。敌方坦克每隔一段时间,就自动开炮。敌方坦克遇到墙就会停下来。停下来的坦克,前方的墙如果被摧毁了,又能继续前进。每隔几秒钟,敌方坦克就会顺时针变换一个方向前进。每局最大时长为100秒。

项目-坦克大战-设计报告

《JAVA程序开发课程设计》项目设计 项目名称:TankWar 软件 专业:软件工程班级:13软工1班姓名:毛晨光学号:1322120124 一、需求分析: 基本功能: 1.玩家控制的坦克能够四处移动并且打击敌方坦克; 2.敌方坦克能够随机四处移动并且打击玩家控制的坦克; 3.玩家控制的坦克拥有血量,而敌方坦克没有; 4.坦克受到攻击时血条会缩短; 5.敌方坦克被消灭完之后,提示游戏胜利; 6.用户方坦克被消灭后提示游戏结束; 特色功能: 1.坦克具有图片,不单单只是个圈圈。 2.增加了血包功能,地图上会随机出现一个血包,我方坦克开过会增加 血量。 二、系统设计: 1.TankMap类:实现游戏界面地图的初始化。 2.PainTread类:绘制和重绘功能。 3.DirectionHandler:监听用户的键盘输入。

4.Tank类:实现坦克的初始化,绘制,移动,发射等功能。 5.EnemyTank:实现敌方坦克的初始化,绘制,移动,发射等功能。 6.Shell类:实现炮弹的初始化,绘制,移动,攻击功能。 7.Explor类:实现爆炸的初始化。绘制功能,爆炸效果由绘制半径从小到 大再到小的圆实现。 8.Direction类:包含枚举。 9.Blood类:用于实现血包的功能。 三、功能实现。 一.绘制地图功能: public class TankMap extends Frame{ //定义地图的尺寸。 public static final int MAPWIDTH=800; public static final int MAPHEIGHT=600; //我方坦克 Tank t=null; //定义随机出现的血包 Random r=new Random(); Image bufferImage=null; public static java.util.Listshells=new ArrayList(); //地方坦克集合 public static java.util.List-> enemys=new ArrayList();

坦克大战系统《Java程序开发实训》综合实训报告

《Java程序开发实训》综合实训报告 题目:坦克大战系统 姓名:方庆 学号:2010203206 班级:10软件(2)班

一、系统实现的主要功能及运行结果截图 选择的语言的原因 游戏本身是一种娱乐方式,带给人无尽的乐趣,而且游戏行业的发展也将是带动周边行业的发展。同样对做出游戏的人的要求也会越来越高一满足游戏爱好者的要求。本次期末设计就是设计一种娱乐性较强的小游戏坦克大战,说到大战其实是不敢当的。但游戏基本拥有可玩性。java语言是一种跨平台,适合与分布计算环境的面向对象编程语言,java主要用在web开发,手机游戏及一些平台游戏的开发,他有很好的跨平台性。所以本次的设计坦克游戏选择的是java。 系统软件的软件环境 1.网络服务器操作系统:Window是 XP以上 2.开发工具:Eclipse 3运行环境:J2sdk 4.编程语言:java语言。 人机对战模式功能 1.能够发射子弹打击敌人 2.敌人能够移动 3.能够模拟爆炸 4.能够产生障碍 5能够增长生命6.能够使用超级子弹 坦克可以发射子弹

玩家坦克被击中血量减少。 被击中的坦克发生爆炸并且吃血块可以加血量。

玩家坦克可以从把方向发射超级子弹 自己的TankHealth为<=0时,。说明玩家坦克已死亡。游戏结束

本系统的坦克大战是基于java语言设计的开发,具有较高的人工智能和相对的图形处理。游戏可一人作战每次电脑方有10辆坦克, 此一举消灭全部的敌方坦克为目的。在这过程中坦克有机会得到血块来添加自己的生命值。从而变得强大。也利用wall来形成阻击敌人。 游戏拥有开挂的功能。可以穿过墙体来攻击敌方坦克。还给玩家坦克 置了超级炮弹。从八个方向同时射出炮弹来摧毁敌方坦克。主要功能 简单罗列如下: 1.屏幕左上方显示游戏的状态,当玩家方坦克全数为0是游戏结束 2.敌方坦克只在空地上行走,不可通过Wall 3.游戏打坏敌方坦克后,可随机位置随机出现血块奖励。坦克经过该 位置可获得相应的生命值加成。 4.玩家坦克的游戏资格和电脑坦克不同。 TankClient类设计流程 游戏系统类关联图

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

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

坦克大战游戏 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

实习成果

毕业实习是学生学完教学计划规定的全部课程后,在进行毕业论文之前的一个重要的教学环节,是一个理论联系实际,锻炼和提高学生组织管理能力,培养分析、解决实际问题能力的教学过程。通过实习使我加深对所学专业课程的理解,增强综合运用专业知识的能力。熟悉专业工作的内容,提高运用理论知识解决实际问题的能力。根据所学课程的理论知识,结合企业的运营实际,同时提高观察问题、分析问题、解决问题的能力。 我实习的时间为2013年9月2日——2013年10月8日,长沙卓京信息有限公司。长沙卓京信息技术有限公司位于湖南林业科学院林培楼二楼,由来自华为、金蝶、百度、中国移动、中国大唐电力等知名IT公司的骨干、管理人才创办,直接引进国际先进IT技术,结合中国本土IT企业需求,培养高端IT人才。 卓京信息致力于为IT企业培养并输送基于Java、Android、企业级软件开发、手机软件开发、3G/4G开发人才。公司于国内多家优秀企业深入合作,由企业提供实习基地、设备资源,并指派专业人员参与学校的专业教学。 卓京信息推出国内面向移动互联网行业最权威的3G职业教育品牌,公司已获得工业和信息化部通信行业职业技能鉴定指导中心的认可,学生入学签订就业保障协议,毕业及即可就业。实现招聘和岗前实训同步、教学与研发同步,学院就业率及平均就业薪资稳居国内同类机构领先水平,教学质量有口皆碑。公司具备强大的产品开发、产品推广、项目运营和创业卵化能力。随着3G数据业务的普及,“3G”带来大量的就业机会,卓京3G移动方向的培训产品正是在这种背景应运而生。 在一月的时间内,我学习Java的相关知识,参加培养职业素养课,参与Java项目的制作。根据权威机构赛迪智库的分析结果,自2010年以来,我国移动互联网用户,也就是手机上网人数呈爆炸式增长。 Java是现在全球最时髦的开发工具之一,它拥有一套庞大且完善的类库,内置了其他语言需要靠库甚至是操作系统才能支持的功能,拥有一个虚拟机,总之,Java的出现,确实给整个程序界带来了巨大的冲击,也许现在还无法准确评估Java为整个IT业带来的影响,但是有一点却毋庸置疑---Java将不可避免地影响一代程序员. Java在可以预见的一段时间里带给自己的影响. 在美国,起来越多的应用是基于Java开发的.Java在企业的应用中的日臻完美,打消了许多人对Java无法应用于大型企业级应用的顾虑.而在国内,Java也已如火如荼.据调查,在未来几年内,将会出现20万个Java程序员职位需求,也许这将超过其它任何一种程序员的需求. Java的BBs有Java研究组织,中国Java世界,SunOne专家路等(刚成立)Java是面积网络的设计语言,用来让程序员创建应用程序,这些应用程序可以通过下载,而且可在任何计算平台上安全地运行,如果再加上互联网和公司企业内部网体系,你将会拥有一个未准的网络计算环境,Java作为一个分布式的,面向对象的程序设计各方,可以让位于任何地方的任何计算机应用网络上的的应用程序. 综合上述,Java的生命力体现在如下方面: 1. Java产生与流行是InterNet发展的客观要求. 2.是一门各方面性能都很好的编程语言,它的基本特点是简单,面向对象,分布式,解释的,健壮的,完全的,结构中立的,可移植的,性能很优异的,多线程的,动态的,适合的Internet环境上开发应用系统.

python精品教学课件(温州大学)实验6 游戏:外星人入侵

---------------------------------------------------------------最新资料推荐------------------------------------------------------ python精品教学课件(温州大学)实验6 游戏:外 星人入侵 温州大学物理与电子信息工程学院软件设计基础实验报告实验名称: 实验 6 游戏: 外星人入侵班班级: 14 电科 1 班姓姓名: 徐炜学学号: 14211111132 实验地点: 5B105 日日期: 2019/4/21 一、实验目的: 用利用 Python 模拟游戏体验二、实验环境: win 7 + python 3.6 三、实验内容和要求: 内容1: 按教材第 2 部分项目 1 的指引,实现外星人入侵的游戏,其中包含飞船、外星人、积分等元素。 内容2: 自己设计一个小游戏项目,并使用 pygam 模块实现之。 通过本次实验,掌握以下编程知识点: 各种函数方法的套用四、实验步骤: (对实验步骤的说明应该能够保证根据该说明即可重复完整的 1 / 4

实验内容,得到正确结果。 )我是通过以下步骤来完成实验任务,得到结果的: (在编辑器输入代码,通过调试发现何种问题,修改程序,得到计算结果,判别结果的正确性,修改错误的结果,得到正确的结果或更好的结果,分析结果并得出结论,等等。 。 。 ) 1.通过模拟书上的代码加以改编,测试并实现。 2.通过同类型的游戏相比较,加以改进。 3.通过模拟的实验加以复制。 五、实验结果与分析(含程序、数据记录及分析和实验总结等): 每个程序的代码(重要语句要有注释)和运行结果(均使用屏幕拷贝图像的方式)罗列和说明如下: 内容 1 的代码: 第一部分: 外星人的类第二部分: 主要函数第三部分: 子弹的类第四部分: 按钮的类第五部分: 功能管理的类第六部分: 统计相关的类第七部分: 现实得分信息第八部分:

坦克大战设计

湖北大学 J A V A课程设计论文 题目坦克大战游戏 姓名张诚学号 2014221119200156 姓名柳谦学号 2014221119200091 专业年级计算机科学与技术1401 指导教师王雷春职称副教授 2016年 5月

目录 绪论 (4) 1背景 (4) 2课程设计目标及目的 (5) 2.1课程设计的目标 (5) 2.2课程设计的目的 (5) 2.3可行性分析 (5) 2.3.1技术可行性 (5) 2.3.2经济可行性分析 (6) 3概要设计 (6) 4详细设计 (7) 4.1项目与类的结构图 (7) 4.2 各类实现的功能概要 (7) 4.2.1 barrier包 (7) 4.2.2 lightButton包 (7) 4.2.3 Tankwar包 (7) 4.2.4 mapediter包 (8) 4.3 主要类的的UML图及主要成员变量和函数说明 (8) 4.3.1 Barrier类 (8) 4.3.2 LightButton类 (11) 4.3.3 Mapediter类 (13) 4.3.4 Main类 (15) 4.3.5 Boom类 (18) 4.3.6 Item类 (18) 4.3.7 Missle类 (21) 4.3.8 PanelShow类 (25) 4.3.9 Tank类 (26) 4.3.10 TankWar 类 (33) 5运行结果 (39) 6总结 (46) 7参考文献 (46) 8附录 (47) 坦克大战

摘要 坦克大战是一款最初由日本南梦宫Namco游戏公司1985年在任天堂FC平台上,推出的一款多方位平面射击游戏。一经推出,人气十分高涨,然后又陆续推出了GB,PC等版本,玩法也大大扩充,由最初的单人2D过关演变到如今的多人3D联网对战游戏,我们小时候应该都体验过,之前C#课程中已经了解过有关信息,如今就想同样以Java为载体编写一款坦克大战。 本课题展示了如何使用Java编写出能够实际运行的单人版坦克大战游戏。课题介绍了项目的功能、类的设计和逻辑难点等重要点。通过本课题,你可以了解到有关Java开发在实际运用中的基础知识、并对应用游戏开发有一定的新的认识。

C语言课程设计指导书.

C语言课程设计指导书 课程设计是C语言教学中,一个重要的实践环节。一般来讲,课程设计应该比课程教学实验复杂一些,要求所涉及的内容应该有一定的深度和广度,并更加接近现实应用。通过课程设计的综合训练,培养学生实际分析问题、编程和动手能力,最终目标是想通过这种形式,帮助学生系统掌握该门课程的主要内容,更好地完成教学任务。本章简要介绍C语言课程设计的要求,并给出部分示例设计题目及其预期目标。由于各校的情况不尽相同,各学校应根据本校的特点和教学计划,选择相应的课程设计内容。 1 课程设计目标 1.1 课程设计目标 使学生综合使用所学过的C语言程序设计知识,掌握结构化程序设计的基本思路和方法,利用所学的基本知识和技能,发挥自学能力和查找资料的能力,解决稍微复杂的结构化程序设计问题,加深对所学知识的理解与掌握,增强学生利用自己所学知识解决实际问题的能力,为以后的程序开发打下基础。 课程设计的目的和要求: 1、使学生巩固和加强《C语言程序设计》课程的理论知识。 2、使学生掌握C语言的基本概念、语法、语义和数据类型的使用特点。 3、使学生掌握C语言程序设计的方法及编程技巧,能正确使用C语言编写程序。 4、进一步理解和运用结构化程设计的思想和方法;学会利用流程图或N-S图表示算法。 5、使学生掌握调试程序的基本方法及上机操作方法。 6、掌握书写程设计开发文档的能力,使学生学会撰写课程设计总结报告。课程设计的思想和方法还可以作为学生做毕业论文时的参考资料。 7、通过查阅手册和文献资料,培养学生独立分析问题和解决问题的能力。为学生做毕业设计打好基础。 8、初步掌握开发一个小型实用系统的基本方法:结合实际应用的要求,使课程设计既覆盖知识点,又接近工程实际需要。通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力及编程能力,并养成良好的编程习惯。 9、培养学生的创新能力和创新思维。学生可以根据指导书和相关文献上的参考算法,自己设计出相应的应用程序。 10、培养学生良好的程序设计风格。在实际编程中,为了提高编程质量,对空行、空格和注释均有要求。学生在课程设计书写代码时,应该严格按要求处理,以便建立良好的程序设计风格。

java实现坦克大战课程设计报告书

Java实现坦克大战小游戏 摘要 Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。我的课程设计是用java来做一个简单的坦克大战小游戏。我将这个程序细分了多个部分,每个部分都建了独立的类,比如:坦克的模型类,河道,树和坦克方向等等。之所以将之细分,是遵循了java的万事万物皆对象的原理。在实现每个类时,最简单但也是最繁琐就是建立界面与实例化坦克,因为这牵扯了界面布局,监听的建立等;而有一些类,比如;河道、墙、坦克,这些类这可以依样画葫芦的编写。 在编写过程,借鉴了他人的一些图片模型,实现的功能也并不是和经典的FC坦克大战相同,但是每个坦克之间的互动还是实现了的。 关键词:万事万物皆对象界面布局坦克之间的互动

USE JAVA TO REALIZE BATTLE CITY MINI-GAME ABSTRACT Java is a object oriented program design language what can compose cross platform application software. My curriculum design is using JAVA language to make a simple small game called Tank Battle. I break down this program into multiple parts, each part is to establish an independent class, such as: Tank Model class, River Course class, Tree class, The Direction of Tank class and so on. The reason divides into multiple parts, is because follow the principle of JAVA that everything is an object. When implements every class, the most simple but also the most troublesome is build interface and instantiate Tank class, because it is involved of the interface layout, monitoring the establishment. While there are some classes, such as: River Course class, Wall class and Tank class, can write like stick closely to the pattern given. In the preparation process, I refer some pictures of models of others, the function of the retaliate isn’t like FC Tank Battle, but the interaction between ach tank is realized. Key words: everything is an object, the interface layout, the interaction between

数据结构课程设计实验报告

华南农业大学 课程论文 ( 设计 ) 课程名称程序设计与算法综合实习Ⅱ 指导老师张义青 所在学院信息学院 专业年级 2013级计算机科学与技术提交日期 2014-12-10 小组成员表

华南农业大学信息学院 课程设计实验 起止日期:2014-2015学年第一学期 需求分析

概要设计 public GameView(Screen screen) { this.screen = screen; screen.setGameView(this); contentPane = screen.getCanvas(); add(contentPane); addKeyListener(screen.getPlayControl()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 582, 394); setSize(Global.SCREEN_WIDTH,Global.SCREEN_LENGTH); setTitle("坦克大战"); setVisible(true); menuBar = new JMenuBar(); setJMenuBar(menuBar); //窗体构建 menu = new JMenu("游戏"); //游戏菜单 menuBar.add(menu); //在菜单栏中添加一个菜单键 menu_1 = new JMenu("设置"); //设置菜单 menuBar.add(menu_1); //在菜单栏中添加一个菜单键 menu_2 = new JMenu("帮助"); //帮助菜单 menuBar.add(menu_2); //在菜单栏中添加一个菜单键GroupLayout gl_contentPane = new GroupLayout(contentPane); //窗体布局 详细设计 //游戏菜单

基于java坦克大战课程设计

摘要 面向对象方法是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,它吸取了结构化程序设计的精华,以更接近人们通常思维的方式来处理问题,是一种全新的软件开发技术。 作为一种新的的编程语言,Java很大程度推广了面向对象的思想。随着计算机技术的发展,Java的强大展现出它不可替代的作用。Java的功能不仅体现在它网络方面的应用,对于应用程序设计、游戏设计等Java都能满足需求。 本文针对Java 的具体应用,设计了一个小游戏。根据游戏的规则,用户将可以和计算机进行简单对战。程序实现了友好的用户交互界面,让用户能很好地对游戏进行操作。 关键字:JAVA GUI 游戏 ABSTRACT The Object-Oriented Method is a method which apllies the Object-Oriented Design to the process of the software exploiture and directs the ploy of development. It extracts the prime of the Structured Design for Computer Programmers, deals matters with a folksy fashion, which is considered to be a grand new software-develop technique. As a new programming language, Java spread the Object-Oriented Design in a certain degree. With the development of the technique of computer, the insurmountable function of JAVA is exhibited for its’ mightiness. Not only applies in network, JAVA also can fulfill the requirement of the Application-Design and Game-Design. In this paper, to use the idiographic application of JAVA , I design a game called . Following the regular of the game, user can play a simple revalry with computer. This programme actualizes a folksy GUI mode, which will make user master game easily. Keywords: JAVA GUI Game

相关文档
相关文档 最新文档