C++实现双人枪战游戏
2024-08-31 02:13:35
//单机版枪战游戏,喜欢就拿走,把赞留下
//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 ;
}
最新文章
- swift3.0变化总结
- SQLAchemy、MYSQL、PYMYSQL
- 开发机多用户 xdebug 远程调试 PhpStorm
- php读取目录下的文件
- Swift 入门之简单语法(三)
- ettercap的中间人欺骗+sslstrip过滤掉https协议
- Mybatis使用过程问题总结
- 每个努力奋斗过的人,被不公正的际遇砸了满头包的时候,都有那么一瞬间的代入感。出生就是hard模式的人,早已经历了太多的劳其筋骨饿其体肤,再多的人为考验只会摧毁人对美好的向往。
- Leetcode中sort排序遇到的一些问题
- Docker学习之3——容器
- Activity生命周期,切换,参数传递,bundle(包),值对象,Activity参数返回,Activity的启动模式
- Navicat premiu的导入和导出
- SRM476
- Java Web 开发填坑记- 如何正确的下载 Eclipse
- 前端学习 -- Css -- 文档流
- rssh RSA(非对称密钥)
- 【题解】期末考试 六省联考 2017 洛谷 P3745 BZOJ 4868 贪心 三分
- linux之nginx的安装
- bzoj 4811 由乃的OJ
- 爬虫常用Xpath和CSS3选择器对比
热门文章
- 苹果官方Instruments工具之Automation的介绍
- 由文字生成path后制作写字的动画
- MySQL5.6 GTID方式,配置主从
- YTU 2732:3798-Abs Problem
- 网络安全中机器学习大合集 Awesome
- P2597 [ZJOI2012]灾难 拓扑排序
- java SWing事件调用的两种机制
- PCB 使用Nginx让IIS7实现负载均衡
- [Swift通天遁地]七、数据与安全-(17)使用Swift实现原生的3DES加密和解密
- Java使用Cipher类实现加密,包括DES,DES3,AES和RSA加密