2021-08-07

坦克大战


玩家一(蓝色):
‘w’上
‘s’下
‘a’左
‘d’右

    ‘i’上发子弹
    ‘k’下发子弹
    ‘j’左发子弹
    ‘l’右发子弹

玩家二(红色):

    ‘↑’上
    ‘↓’下
    ‘←’左
    ‘→’右
    
    ‘5’上发子弹
    ‘2’下发子弹
    ‘1’左发子弹
    ‘3’右发子弹

空格暂停

#include <Windows.h>
#include <iostream>
#include <conio.h>
#include <cstring>
#include <ctime>

#define color(x) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x)

using namespace std;

void gotoxy(int x, int y) {
    HANDLE hout;
    COORD pos;
    pos.X = x * 2;
    pos.Y = y;
    hout = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hout, pos);
    cout << "  ";
}

int b[13][13];

int x1 = 1, y1 = 10;
int x2 = 10, y2 = 1;

void showb() {
	for (int i = 1; i <= 10; i++) {
		for (int j = 1; j <= 10; j++) {
			if (b[i][j] == 1 || b[i][j] == 2 || b[i][j] == 3 || b[i][j] == 4) {
				color(0xff);
			} else {
				color(0x00);
			}
			if (i == y1 && j == x1) {
				color(0xbb);
			} else if (i == y2 && j == x2) {
				color(0xcc);
			}
			gotoxy(j, i);
		}
	}
}
void moveb() {
	bool f[13][13];
	memset(f, 0, sizeof(f));
	for (int i = 1; i <= 11; i++) {
		for (int j = 1; j <= 10; j++) {
			if (b[i][j] == 1 && !f[i][j]) {
				if (i > 1) {
					b[i][j] = 0;
					b[i - 1][j] = 1;
					f[i - 1][j] = 1;
				} else {
					b[i][j] = 0;
				}
			}
			if (b[i][j] == 2 && !f[i][j]) {
				if (i < 11) {
					b[i][j] = 0;
					b[i + 1][j] = 2;
					f[i + 1][j] = 1;
				} else {
					b[i][j] = 0;
				}
			}
			if (b[i][j] == 3 && !f[i][j]) {
				if (j > 1) {
					b[i][j] = 0;
					b[i][j - 1] = 3;
					f[i][j - 1] = 1;
				} else {
					b[i][j] = 0;
				}
			}
			if (b[i][j] == 4 && !f[i][j]) {
				if (j < 10) {
					b[i][j] = 0;
					b[i][j + 1] = 4;
					f[i][j + 1] = 1;
				} else {
					b[i][j] = 0;
				}
			}
		}
	}
}

void set() {
	color(0xff7);
	for (int i = 0; i < 11; i++) {
		gotoxy(0, i);
		gotoxy(11, 11 - i);
		gotoxy(i, 0);
		gotoxy(11 - i, 11);
		Sleep(30);
	}
	gotoxy(11, 0);
	gotoxy(0, 11);
	Sleep(30);
}
void qset(bool flag) {
	color(0xff7);
	for (int i = 0; i < 11; i++) {
		gotoxy(0, i);
		gotoxy(11, 11 - i);
		gotoxy(i, 0);
		gotoxy(11 - i, 11);
	}
	gotoxy(11, 0);
	gotoxy(0, 11);
	color(0xf);
	gotoxy(2, 4);
	if (!flag) {
		cout << "==red win==";
	} else {
		cout << "==blue win==";
	}
}

int main() {
	int sr, sb;
	bool flag;
	srand((int)time(0));
	set();
	color(0xbb);  gotoxy(x1, y1);
	color(0xcc);  gotoxy(x2, y2);
	while (1) {
		if (sb > 0) {
			sb--;
		}
		if (sr > 0) {
			sr--;
		}
		if (_kbhit()) {
			char ch = getch();
			if (ch == 'a' && x1 > 1) {
				color(0x00);  gotoxy(x1, y1);
				x1--;
				color(0xbb);  gotoxy(x1, y1);
			}
			if (ch == 'd' && x1 < 10) {
				color(0x00);  gotoxy(x1, y1);
				x1++;
				color(0xbb);  gotoxy(x1, y1);
			}
			if (ch == 'w' && y1 > 1) {
				color(0x00);  gotoxy(x1, y1);
				y1--;
				color(0xbb);  gotoxy(x1, y1);
			}
			if (ch == 's' && y1 < 10) {
				color(0x00);  gotoxy(x1, y1);
				y1++;
				color(0xbb);  gotoxy(x1, y1);
			}
			if (sb <= 0) {
				if (ch == 'i') {
					b[y1 - 1][x1] = 1;
					sb = 25;
				}
				if (ch == 'k') {
					b[y1 + 1][x1] = 2;
					sb = 25;
				}
				if (ch == 'j') {
					b[y1][x1 - 1] = 3;
					sb = 25;
				}
				if (ch == 'l') {
					b[y1][x1 + 1] = 4;
					sb = 25;
				}
			}
			
			if (ch == 75 && x2 > 1) {
				color(0x00);  gotoxy(x2, y2);
				x2--;
				color(0xbb);  gotoxy(x2, y2);
			}
			if (ch == 77 && x2 < 10) {
				color(0x00);  gotoxy(x2, y2);
				x2++;
				color(0xbb);  gotoxy(x2, y2);
			}
			if (ch == 72 && y2 > 1) {
				color(0x00);  gotoxy(x2, y2);
				y2--;
				color(0xbb);  gotoxy(x2, y2);
			}
			if (ch == 80 && y2 < 10) {
				color(0x00);  gotoxy(x2, y2);
				y2++;
				color(0xbb);  gotoxy(x2, y2);
			}
			if (sr <= 0) {
				if (ch == '5') {
					b[y2 - 1][x2] = 1;
					sr = 25;
				}
				if (ch == '2') {
					b[y2 + 1][x2] = 2;
					sr = 25;
				}
				if (ch == '1') {
					b[y2][x2 - 1] = 3;
					sr = 25;
				}
				if (ch == '3') {
					b[y2][x2 + 1] = 4;
					sr = 25;
				}
			}
			if (ch == ' ') {
				while (1) {
					if (_kbhit()) {
						char ch2 = getch();
						if (ch2 == ' ') {
							break;
						}
					}
				}
			}
		}
		if (b[y1][x1] == 1 || b[y1][x1] == 2 || b[y1][x1] == 3 || b[y1][x1] == 4) {
			flag = 0;
			break;
		}
		if (b[y2][x2] == 1 || b[y2][x2] == 2 || b[y2][x2] == 3 || b[y2][x2] == 4) {
			flag = 1;
			break;
		}
		showb();
		moveb();
		Sleep(10);
	}
	qset(flag);
	while (1);
	return 0;
}

说明 只能用Dev-c++

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值