//单机版枪战游戏,喜欢就拿走,把赞留下
//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 ;
}

最新文章

  1. swift3.0变化总结
  2. SQLAchemy、MYSQL、PYMYSQL
  3. 开发机多用户 xdebug 远程调试 PhpStorm
  4. php读取目录下的文件
  5. Swift 入门之简单语法(三)
  6. ettercap的中间人欺骗+sslstrip过滤掉https协议
  7. Mybatis使用过程问题总结
  8. 每个努力奋斗过的人,被不公正的际遇砸了满头包的时候,都有那么一瞬间的代入感。出生就是hard模式的人,早已经历了太多的劳其筋骨饿其体肤,再多的人为考验只会摧毁人对美好的向往。
  9. Leetcode中sort排序遇到的一些问题
  10. Docker学习之3——容器
  11. Activity生命周期,切换,参数传递,bundle(包),值对象,Activity参数返回,Activity的启动模式
  12. Navicat premiu的导入和导出
  13. SRM476
  14. Java Web 开发填坑记- 如何正确的下载 Eclipse
  15. 前端学习 -- Css -- 文档流
  16. rssh RSA(非对称密钥)
  17. 【题解】期末考试 六省联考 2017 洛谷 P3745 BZOJ 4868 贪心 三分
  18. linux之nginx的安装
  19. bzoj 4811 由乃的OJ
  20. 爬虫常用Xpath和CSS3选择器对比

热门文章

  1. 苹果官方Instruments工具之Automation的介绍
  2. 由文字生成path后制作写字的动画
  3. MySQL5.6 GTID方式,配置主从
  4. YTU 2732:3798-Abs Problem
  5. 网络安全中机器学习大合集 Awesome
  6. P2597 [ZJOI2012]灾难 拓扑排序
  7. java SWing事件调用的两种机制
  8. PCB 使用Nginx让IIS7实现负载均衡
  9. [Swift通天遁地]七、数据与安全-(17)使用Swift实现原生的3DES加密和解密
  10. Java使用Cipher类实现加密,包括DES,DES3,AES和RSA加密