//单机版枪战游戏,喜欢就拿走,把赞留下
//by floatiy #include<iostream>
#include<cstdio>
#include<windows.h>
#include<conio.h>
using namespace std;
int SIZ = ;
HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord; HANDLE hCon;
enum Color { DARKBLUE = , DARKGREEN, DARKTEAL, DARKRED, DARKPINK, DARKYELLOW, GRAY, DARKGRAY, BLUE, GREEN, TEAL, RED, PINK, YELLOW, WHITE };
void SetColor(Color c) {
if(hCon == NULL)
hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon, c);
} SYSTEMTIME sys; //sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek
struct PLAYER {
int x,y;
int hp;
int gun;
int direct;
} p1,p2;
int map[][]; int abs(int x) {
if(x < ) return -x;
return x;
} void locate(int x,int y) {
coord.X=y - ;
coord.Y=x - ;
SetConsoleCursorPosition(hout,coord);
} void print_map() {
locate(,);
SetColor(GRAY);
for(int i = ; i <= SIZ; i++) cout<<"■";
locate(SIZ,);
for(int i = ; i <= SIZ; i++) cout<<"■";
for(int i = ; i < SIZ; i++) {
locate(i,);
cout<<"■";
locate(i,SIZ*-);
cout<<"■";
}
locate(SIZ+,);
SetColor(WHITE);
} void create_tree(int x,int y) {
map[x][y] = map[x+][y] = map[x-][y] = map[x][y+] = map[x][y-] = ;
} void use_map(int x) {
if(x == ) {
SIZ = ;
SetColor(DARKGREEN);
map[][]=map[][]=map[][]=map[][]=map[][]=map[][]=map[][]=map[][]=;
for(int i = ; i < SIZ; i++) {
for(int j = ; j < SIZ; j++) {
if(map[i][j] == ) {
locate(i,j*-);
cout<<"■";
}
}
}
SetColor(GRAY);
for(int i = ; i <= ; i++) {
map[i][i] = ;
locate(i,i*-);
cout<<"■";
}
SetColor(WHITE);
} else if(x == ) {
SIZ = ;
SetColor(GRAY);
for(int i = ; i <= ; i++) {
if(i == || i == ||i == ) continue;
map[i][] = map[][i] = map[][i] = map[i][] = ;
}
for(int i = ; i <= SIZ; i++) {
for(int j = ; j <= SIZ; j++) {
if(map[i][j] == ) {
locate(i,j*-);
cout<<"■";
}
}
}
SetColor(DARKGREEN);
for(int i = ; i<=; i++) {
if(i == || i == ) continue;
map[i][] = map[][i] = map[][i] = map[i][] = ;
}
create_tree(,);
create_tree(,);
for(int i = ; i <= SIZ; i++) {
for(int j = ; j <= SIZ; j++) {
if(map[i][j] == ) {
locate(i,j*-);
cout<<"■";
}
}
}
SetColor(WHITE);
}
}
void cleanbody(int x,int y);
void putbody(int x,int y,int z); void player_init() {
p1.hp = p2.hp = ;
p1.gun = p2.gun = ;
p1.direct = ;
p2.direct = ;
p1.x = ;
p1.y = ;
p2.x = SIZ - ;
p2.y = SIZ - ;
putbody(p1.x,p1.y,);
putbody(p2.x,p2.y,);
} void mapinit() {
for(int i = ; i <= SIZ; i++) {
map[i][] = map[][i] = map[SIZ][i] = map[i][SIZ] = ;
}
} void init() {
printf("Use Which Map?\n");
int x;
cin>>x;
system("cls");
use_map(x);
mapinit();
print_map();
player_init();
} void putbody(int x,int y,int z) {
if(z == ) SetColor(BLUE);
else if(z == ) SetColor(RED);
locate(x,y*-);
cout<<"■";
SetColor(WHITE);
}
void cleanbody(int x,int y) {
locate(x,y*-);
cout<<" ";
}
/*
LIST
direct:
w 1
a 2
s 3
d 4
gun:
usp 1
mimigun 2
awp 3
block:
void 0
stone 1
tree 2
player 3
clip 4
*/
bool judge(int x,int y) {
if(map[x][y] == ) return false;
if(map[x][y] == ) return false;
if(map[x][y] == ) return false;
return true;
} bool judge_gun(int x,int y) {
if(map[x][y] == ) return ;
if(map[x][y] == ) return ;
if(map[x][y] == ) {
if(p1.x == x && p1.y == y) p1.hp -= ;//此处暂时不管威力
else p2.hp -= ;
return ;
}
return ;
} int cnt;
struct Clip {
int x,y;
int derect;
int force;
int start;
bool flag;
} clip[];
void create_clip(int y,int x,int a,int b) {
int X,Y;
if(y == ) {
if(!judge_gun(a-,b)) return;
X = a-;
Y = b;
} else if(y == ) {
if(!judge_gun(a,b-)) return;
X = a;
Y = b-;
} else if(y == ) {
if(!judge_gun(a+,b)) return;
X = a+;
Y = b;
} else if(y == ) {
if(!judge_gun(a,b+)) return;
X = a;
Y = b+;
}
cnt++;
GetLocalTime( &sys );
clip[cnt].start = sys.wMilliseconds + sys.wSecond * + sys.wHour * ;
clip[cnt].x = X;
clip[cnt].y = Y;
if(x == ) {
clip[cnt].derect = p1.direct;
} else if(x == ) {
clip[cnt].derect = p2.direct;
}
} void shoot(int x) {
if(x == ) {
create_clip(p1.direct,,p1.x,p1.y);
} else if(x == ) {
create_clip(p2.direct,,p2.x,p2.y);
}
} void clean_clip(int x,int y) {
locate(x,y*-);
cout<<" ";
locate(,);
} void print_clip(int x,int y,int i) {
if(clip[i].flag) {
clean_clip(x,y);
return;
}
locate(x,y*-);
SetColor(YELLOW);
cout<<"''";
locate(,);
// system("pause");
} void clipmove() {
GetLocalTime( &sys );
int t = sys.wMilliseconds + sys.wSecond * + sys.wHour * ;
for(int i = ; i <= cnt; i++) {
if(clip[i].flag) continue;
if(abs(clip[i].start - t) > ) {
clip[i].start = t;
int x = clip[i].x;
int y = clip[i].y;
if(clip[i].derect==) {
if(!judge_gun(clip[i].x-,clip[i].y)) {
clip[i].flag = ;
clean_clip(x,y);
continue;
}
clean_clip(clip[i].x,clip[i].y);
clip[i].x--;
print_clip(clip[i].x,clip[i].y,i);
} else if(clip[i].derect==) {
if(!judge_gun(clip[i].x,clip[i].y-)) {
clip[i].flag = ;
clean_clip(x,y);
continue;
}
clean_clip(clip[i].x,clip[i].y);
clip[i].y--;
print_clip(clip[i].x,clip[i].y,i);
} else if(clip[i].derect==) {
if(!judge_gun(clip[i].x+,clip[i].y)) {
clip[i].flag = ;
clean_clip(x,y);
continue;
}
clean_clip(clip[i].x,clip[i].y);
clip[i].x++;
print_clip(clip[i].x,clip[i].y,i);
} else if(clip[i].derect==) {
if(!judge_gun(clip[i].x,clip[i].y+)) {
clip[i].flag = ;
clean_clip(x,y);
continue;
}
clean_clip(clip[i].x,clip[i].y);
clip[i].y++;
print_clip(clip[i].x,clip[i].y,i);
}
}
}
} void judge_hp() {
int x = p1.hp;
int y = p2.hp;
if(x< && y< && x > y) swap(x,y);
if(x <= ) {
locate(,);
system("cls");
printf("GAME OVER!\nTHE WINNER IS P2!");
Sleep();
printf("\n-MADE BY Floatiy-");
exit();
} else if(y <= ) {
locate(,);
system("cls");
printf("GAME OVER!\nTHE WINNER IS P1!");
Sleep();
printf("\n-MADE BY Floatiy-");
exit();
}
} void prog() {
char ch;
while(true) {
if(kbhit()) {
ch=getch();
if(ch == 'w' && judge(p1.x-,p1.y)) {
p1.direct = ;
cleanbody(p1.x,p1.y);
map[p1.x][p1.y] = ;
putbody(--p1.x,p1.y,);
map[p1.x][p1.y] = ;
} else if(ch == '' && judge(p2.x-,p2.y)) {
p2.direct = ;
cleanbody(p2.x,p2.y);
map[p2.x][p2.y] = ;
putbody(--p2.x,p2.y,);
map[p2.x][p2.y] = ;
} else if(ch == 'a' && judge(p1.x,p1.y-)) {
p1.direct = ;
cleanbody(p1.x,p1.y);
map[p1.x][p1.y] = ;
putbody(p1.x,--p1.y,);
map[p1.x][p1.y] = ;
} else if(ch == '' && judge(p2.x,p2.y-)) {
p2.direct = ;
cleanbody(p2.x,p2.y);
map[p2.x][p2.y] = ;
putbody(p2.x,--p2.y,);
map[p2.x][p2.y] = ;
} else if(ch == 's' && judge(p1.x+,p1.y)) {
p1.direct = ;
cleanbody(p1.x,p1.y);
map[p1.x][p1.y] = ;
putbody(++p1.x,p1.y,);
map[p1.x][p1.y] = ;
} else if(ch == '' && judge(p2.x+,p2.y)) {
p2.direct = ;
cleanbody(p2.x,p2.y);
map[p2.x][p2.y] = ;
putbody(++p2.x,p2.y,);
map[p2.x][p2.y] = ;
} else if(ch == 'd' && judge(p1.x,p1.y+)) {
p1.direct = ;
cleanbody(p1.x,p1.y);
map[p1.x][p1.y] = ;
putbody(p1.x,++p1.y,);
map[p1.x][p1.y] = ;
} else if(ch == '' && judge(p2.x,p2.y+)) {
p2.direct = ;
cleanbody(p2.x,p2.y);
map[p2.x][p2.y] = ;
putbody(p2.x,++p2.y,);
map[p2.x][p2.y] = ;
} else if(ch == '') {
shoot();
} else if(ch == ' ') {
shoot();
}
Sleep();
}
clipmove();
judge_hp();
}
} void welcome() {
printf("操作方法:\n玩家1 wasd控制移动,空格攻击\n玩家2 数字小键盘4568控制移动,0攻击\n");
Sleep();
} int main() {
welcome();
GetLocalTime( &sys );
init();
prog();
return ;
}

C++实现双人枪战游戏的更多相关文章

  1. C++游戏(大型PC端枪战游戏)服务器架构

    实习期间深入参与到某大型pc端枪战游戏的后端开发中,此游戏由著名游戏工作室编写,代码可读性极高,自由时间对游戏后台代码进行了深入研究,在满足自身工作需要的同时对游戏后台的架构也有了理解,记录在此,以便 ...

  2. 少儿编程Scratch第三讲:宇宙大战.枪战游戏

    小朋友这周的表现还算不错.周末多数时间都由我陪(bi)着(zhe)做课本上的数学题,后来还学了英语.任重道远啊,语数外都还得加强,还远不到自己就能取得好成绩的阶段. 上周说好这周要做一个发射炮弹的游戏 ...

  3. 【Unity3D】枪战游戏—弹孔设置

    以子弹为原点,发射射线,如果射线检测到障碍物,则返回射线与障碍物的碰撞点 在该点处实例化出弹孔贴图 void Update () { transform.Translate (Vector3.forw ...

  4. 【Unity3D】枪战游戏—发射子弹、射线检测

    一.子弹的碰撞检测: 因为子弹的移动速度非常的快,那么如果为子弹添加一个collider,就有可能检测不到了. 因为collider是每一帧在执行,第一帧子弹可能在100米处,那么下一帧就在900米处 ...

  5. Pascal小游戏 双人射击

    一个双人的游戏 Pascal源码附上 只要俩人不脑残,一下午玩不完...又是控制台游戏中的一朵奇葩. Free Pascal 射击游戏 Program shooting_game; uses crt; ...

  6. Unity3D_(游戏)双人3D坦克_简易版

    双人3D坦克实现 player1: WSAD控制上下左右 空格键发射炮弹 player2: IKJL可控制上下左右 B键发射炮弹 每个坦克只有100hp,子弹击中1次扣30hp,hp时时显示在坦克上 ...

  7. 对使命召唤OL游戏中队友能相互救治的动作设定的感慨

    很偶然的在网吧看到有人在玩一个枪战游戏,场景特别真实特别吸引人,后来留意到是使命召唤OL.我使用QQ帐号(是腾讯代理)玩了一次,觉得游戏做的确实精致,子弹打击效果和人物被子弹击中的效果特别真实,大家可 ...

  8. Atitit. 常用街机系统and 模拟器总结 snk neo geo cps mame sfc smc

    Atitit. 常用街机系统and 模拟器总结 snk neo geo cps mame sfc smc 1. #-------常用 游戏类型 1 2. 街机的历史 2 3. #=========== ...

  9. bzoj2940: [Poi2000]条纹

    2940: [Poi2000]条纹 条纹游戏是一个双人的游戏.所需要的物品有一个棋盘以及三种颜色的长方形条纹,这三种颜色分别是红色.绿色和蓝色.所有的红色条纹的尺寸是c*1,所有的绿色条纹的尺寸是z* ...

随机推荐

  1. 数组方法-->map()

    map()方法: Array.map((数组元素, 数组元素的下标, 数组本身)=>{}[,thisArray]) 1.调用时在数组内部发生了一次从 0 到 length-1 的循环: 2.返回 ...

  2. 500万url的es 批删除

    bash  循环 算术计算 读写文件 [root@hadoop2 ~]# sh looh.sh1234LIZ1 2 3 4 0 1 2 3 4 5 6 7 8 9 10 0games:x:12:100 ...

  3. [Python] partial改变方法默认參数

    Python 标准库中 functools库中有非常多对方法非常有有操作的封装,partial Objects就是当中之中的一个,他是对方法參数默认值的改动. 以下就看下简单的应用測试. #!/usr ...

  4. ios4--UIView的常见属性(尺寸和位置)

    // // ViewController.m // 08-UIView的常见属性(尺寸和位置) // // frame:相对于父控件左上角定位 // bounds:改变长宽,左上角是相对于自己 // ...

  5. 使用Vitamio插件显示花屏

    Vitamio是一款 Android 与 iOS 平台上的全能多媒体开发框架,全面支持硬件解码与 GPU 渲染. 使用vitamio进行播放器的开发非常便捷,使用vitamio的解码,自己编写播放器界 ...

  6. Luogu3403跳楼机

    https://zybuluo.com/ysner/note/1099616 题面 给你三个数\(x\),\(y\),\(z\),问你能够凑出多少个[1,\(h\)]之间的数. 解析 处理出\(y\) ...

  7. 70.资金管理-福利表管理 Extjs 页面

    1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8&quo ...

  8. 在JavaScript中"+"什么时候是链接符号,什么时候是加法运算?

    二元加法运算符“+”在两个操作数都是数字或都是字符串时,计算结果是显而易见的.加号“+”的转换规则优先考虑字符串连接,如果其中一个操作数是字符串或者转换为字符串的对象,另外一个操作数会转换为字符串,加 ...

  9. favourite和favorite的区别

    同一个词,英式和美式的拼写法而已.通常英式英语里的-our-字母组合,到了美式英语里面都成了-or-字母组合,最常见的有英式的 colour,到美式英语成了 color.

  10. Hadoop基础(一)

    Hadoop 基础知识 大数据已经火了很长很长时间了,从最开始是个公司都说自己公司的数据量很大,我们在搞大数据.到现在大数据真的已经非常成熟并且已经在逐渐的影响我们的生产生活.你可能听过支付宝的金融大 ...