写一个简单的打飞机游戏(Dos界面)
2017-03-26 15:52
351 查看
首先分析打飞机游戏的要素:
1、计分。
2、是否被敌机碰撞摧毁(被击中未实现。。。)
3、发射子弹。
(因为是一个简化的游戏。。要素很少。。)
思路:将布局采用二维数组,用*号代表玩家,0代表敌机,敌机用rand()函数设定位置。
ps:代码很乱,有很多不应该在Barod类中实现出现的方法,应该放在player类中实现。
Barod提供布局、输出、设置位置、获取位置。
player类提供了判断是否被碰撞,玩家用wasd控制数组上的移动,子弹射击,控制敌机下落速度。
代码如下:
1、计分。
2、是否被敌机碰撞摧毁(被击中未实现。。。)
3、发射子弹。
(因为是一个简化的游戏。。要素很少。。)
思路:将布局采用二维数组,用*号代表玩家,0代表敌机,敌机用rand()函数设定位置。
ps:代码很乱,有很多不应该在Barod类中实现出现的方法,应该放在player类中实现。
Barod提供布局、输出、设置位置、获取位置。
player类提供了判断是否被碰撞,玩家用wasd控制数组上的移动,子弹射击,控制敌机下落速度。
代码如下:
#pragma once #include<stdlib.h>//使用该头文件中的rand()函数 #include<iostream> #include <conio.h> //通过控制台输入输出流头文件,调用kbhit()刷新查看是否输入,对控制台进行刷新, #include <windows.h> using namespace std; void gotoxy(int x, int y) //光标移动到(x,y)位置,从而达到刷新控制台的视觉效果 { HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(handle, pos); } class Barod { friend class player; private: int high, widgh; int **barod; public: Barod(int x = 15, int y = 25) :high(x), widgh(y) { barod = new int*[x]; for (int i = 0; i < x; i++) barod[i] = new int[y]; for (int i = 0; i < high; i++) for (int j = 0; j < widgh; j++) { barod[i][j] = 0; } } int getx() { return high; } void setprice(int x,int y,int n) { if (n == 1) barod[x][y] = 1; else if (n == 0) barod[x][y] = 0; else if (n == 2) barod[x][y] = 2; else if (n == 3) barod[x][y] = 3; else throw "choose error"; } int getprice(int x, int y) { int temp = 0; temp=barod[x][y]; return temp; } int gety() { return widgh; } void show() { gotoxy(0, 0); for (int i = 0; i < high; i++) { for (int j = 0; j < widgh; j++) { switch (barod[i][j]) { case 0:cout << " "; break; case 1:cout << "*"; break; case 2:cout << "|"; break; case 3:cout << "O"; default: break; } } cout << endl; } Sleep(20); } ~Barod() { for (int i = 0; i < high; i++) delete barod[i]; delete[]barod; } }; class Player { private: Barod brd; int px, py; unsigned int sorce; int dx[3], dy[3]; int dnum; int Mspeed; int speed; public: Player():px(brd.getx()-1),py((brd.gety()-1)/2),sorce(0),dnum(3),Mspeed(20),speed(0){ brd.setprice(px, py, 1); for (int i = 0; i < dnum; i++) { dx[i] = rand() % 3; int temp = brd.gety(); dy[i] = rand() % temp; brd.setprice(dx[i], dy[i], 3); } } void move() { if (kbhit()) { brd.setprice(px, py, 0); switch (_getch()) { case 'w': if (px > 0) --px; break; case 's': if (px < brd.getx() - 1) ++px; break; case'a': if (py > 0) --py; break; case'd': if (py < brd.gety() - 1) ++py; break; case' ': brd.setprice(px-1,py,2); break; } brd.setprice(px, py, 1); } } void shot() { int i, j, k; for (i = 0; i<brd.getx(); i++) { for (j = 0; j<brd.gety(); j++) { if (brd.getprice(i,j) == 2) { for (k = 0; k<dnum; k++) { if ((i == dx[k]) && (j == dy[k])) { sorce++; dx[k] = rand() % 2; dy[k] = rand() % (brd.gety()-1); brd.setprice(dx[k],dy[k],3); brd.setprice(i, j, 0); } } brd.setprice(i, j, 0); if (i>0) brd.setprice(i-1, j, 2); } } } } void dfall() { if(speed < Mspeed) speed++; if (speed == Mspeed) { for (int i = 0; i < dnum; i++) { brd.setprice(dx[i], dy[i], 0); if (dx[i] < brd.getx() - 1) dx[i]++; speed = 0; brd.setprice(dx[i], dy[i], 3); } } for (int i = 0; i < dnum; i++) { if (lose(dx[i], dy[i])) { Sleep(3000); exit(0); } if (dx[i] == brd.getx() - 1) { brd.setprice(dx[i], dy[i], 0); dx[i] = rand() % 2; dy[i] = rand() % (brd.gety() - 1); brd.setprice(dx[i], dy[i], 3); } } } bool lose(int lx,int ly) { if (lx == px&&ly == py) { cout << "游戏结束" << endl; return true; } return false; } void run() { while (1) { brd.show(); cout << "得分:" << sorce << endl; shot(); dfall(); move(); } } };
相关文章推荐
- c写的一个简单的打飞机游戏
- 一个简单的通过上下左右键移动div的案例--可用于游戏的用户操作界面
- 使用C++与SFML编写一个简单的撞球游戏Part3——创建游戏启动界面
- Cocos2d-HTML5游戏引擎,编写一个简单的打飞机游戏
- cocos2d-x 一个简单的游戏界面
- 如何使用Createjs来编写HTML5游戏(七)完成一个简单的打飞机游戏(下)
- 如何使用Createjs来编写HTML5游戏(六)完成一个简单的打飞机游戏(上)
- cocos2d-x 一个简单的游戏界面
- 一个俄罗斯方块游戏的简单实现
- 一个简单的游戏(1)
- 一个最最简单的飞行射击游戏(J2ME)的大体框架介绍
- 一个简单的游戏源代码
- 一个简单的游戏源代码
- 用sdk写了一个简单界面
- C/C++做的一个简单界面程序
- XNA Game Studio是一套有着强大功能和简单界面的游戏制作平台,游戏开发商和游戏玩家都可以使用这套工具开发针对Windows XP以及Xbox360的游戏,XNA Game Studio分为两种版本,一种是面向初学者的EXPRESS版本,还有一种是面向专业用户的专业版。用户使用EXPRESS版本开发游戏完全免费,并且可以随意在PC上发行,不过用该工具开发的游戏若是在360上网络发行,就需要交纳99美元的年费。
- 利用WCF的callback机制开发一个简单的多人游戏模型
- 一个简单的游戏--贪吃蛇
- 一个简单的游戏源代码
- 一个简单的游戏(3)