C++小游戏---起床战争

前言

        各位dalao们好!!!我是yuexingfei_111,目前是一个五年级滴小鞋生,这是本蒻蒟第一次发博客,望各位dalao指导!!!求个关注!!!!!!!!!!!!!!!!!

想法

        本人是一个热爱MC的4年资深新玩家,爱玩起床,也爱C++。某天,本人突发奇想,想用C++做一个起床战争,但......

        没在网上搜到.......................................

        所以,本人用了所学的所有知识,耗时一周,用了500行左右的代码做了一个起床!!!

        废话多说,上代码!!!

       

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#include<time.h>

char a[50][50] = {"OOOOOOOOOOOOOOOOOOOO",
                  "OA                 O",
                  "O H      O         O",
                  "O      OOOOO       O",
                  "O        O       R O",
                  "O                 WO",
                  "OOOOOOOOOOOOOOOOOOOO",
                 };

struct Player {
	int shengming, gongji, fangyu;
};

Player P1, P2;

bool Aw = true, Ww = true;

int x = 2, y = 2, p = 4, q = 17, n = 1, m = 1, c = 5, b = 18, sx = 30, sy = 30, gx = 30, gy = 30, fx = 30, fy = 30;

void out() {
	system("cls");
	for (int i = 0; i <= 7; i++) {
		for (int j = 0; j <= 20; j++) {
			printf ("%c", a[i][j]);
		}
		switch (i) {
			case 0:
				printf ("	H:玩家1(WASD移动)");
				break;
			case 1:
				printf ("	A:H的床");
				break;
			case 2:
				printf ("	R:玩家2(IJKL移动)");
				break;
			case 3:
				printf ("	W:R的床");
				break;
			case 4:
				printf ("	O:墙壁");
				break;
			case 5:
				printf ("	N:增加攻击");
				break;
			case 6:
				printf ("	F:增加防御");
				break;
			case 7:
				printf ("	S:增加生命");
				break;
		}
		printf ("\n");
	}
	printf ("H:\n生命:%d\n攻击:%d\n防御:%d\n\n", P1.shengming, P1.gongji, P1.fangyu);
	printf ("R:\n生命:%d\n攻击:%d\n防御:%d\n\n", P2.shengming, P2.gongji, P2.fangyu);
	if (Aw) {
		printf ("H水晶:YES\n");
	} else {
		printf ("H水晶:NO\n");
	}
	if (Ww) {
		printf ("R水晶:YES\n");
	} else {
		printf ("R水晶:NO\n");
	}
}

void SetFont(int size) {
	CONSOLE_FONT_INFOEX cfi;
	cfi.cbSize = sizeof cfi;
	cfi.nFont = 0;
	cfi.dwFontSize.X = 0;
	cfi.dwFontSize.Y = size;//设置字体大小
	cfi.FontFamily = FF_DONTCARE;
	cfi.FontWeight = FW_NORMAL; //字体粗细
	wcscpy_s(cfi.FaceName, L"宋体");//设置字体
	SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi);
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	CONSOLE_FONT_INFO consoleCurrentFont;
	GetCurrentConsoleFont(handle, FALSE, &consoleCurrentFont);
}

void xuan() {
	for (int i = 1; i <= 2; i++) {
		if (i == 1) {
			printf ("请H选择!(输入前面的序号)\n");
		} else {
			printf ("请R选择!(输入前面的序号)\n");
		}
		printf ("1.战士\n生命:200\n攻击:50\n防御:50\n");
		printf ("2.铠甲人\n生命:150\n攻击:40\n防御:80\n");
		printf ("3.X原型机\n生命:250\n攻击:40\n防御:40\n");
		printf ("4.H原型机\n生命:130\n攻击:45\n防御:85\n");
		printf ("5.X束光机\n生命:135\n攻击:65\n防御:40\n");
		int d;
		scanf ("%d", &d);
		switch (d) {
			case 1:
				if (i == 1) {
					P1.shengming = 200;
					P1.gongji = 50;
					P1.fangyu = 50;
				} else {
					P2.shengming = 200;
					P2.gongji = 50;
					P2.fangyu = 50;
				}
				break;
			case 2:
				if (i == 1) {
					P1.shengming = 150;
					P1.gongji = 40;
					P1.fangyu = 80;
				} else {
					P2.shengming = 150;
					P2.gongji = 40;
					P2.fangyu = 80;
				}
				break;
			case 3:
				if (i == 1) {
					P1.shengming = 250;
					P1.gongji = 40;
					P1.fangyu = 40;
				} else {
					P2.shengming = 250;
					P2.gongji = 40;
					P2.fangyu = 40;
				}
				break;
			case 4:
				if (i == 1) {
					P1.shengming = 130;
					P1.gongji = 45;
					P1.fangyu = 85;
				} else {
					P2.shengming = 130;
					P2.gongji = 45;
					P2.fangyu = 85;
				}
				break;
			case 5:
				if (i == 1) {
					P1.shengming = 135;
					P1.gongji = 65;
					P1.fangyu = 40;
				} else {
					P2.shengming = 135;
					P2.gongji = 65;
					P2.fangyu = 40;
				}
				break;
		}
		system("cls");
	}
}

int zhan() {
	system("cls");
	printf ("交战中......\n");
	Sleep(2500);
	int P1s = P1.shengming, P1g = P1.gongji, P1f = P1.fangyu, P2s = P2.shengming, P2g = P2.gongji, P2f = P2.fangyu;
	while (1) {
		if (P2g - P1f > 0) {
			P1s = P1s - (P2g - P1f);
		}
		if (P1g - P2f > 0) {
			P2s = P2s - (P1g - P2f);
		}

		if (P1.gongji <= P2.fangyu && P1.fangyu >= P2.gongji) {
			printf ("无法交战!\n");
			Sleep(1000);
			a[p][q] = ' ';
			p = 4, q = 17;
			a[p][q] = 'R';
			a[x][y] = ' ';
			x = 2, y = 2;
			a[x][y] = 'H';
			return 100;
		}

		if (P1s <= 0 && P2s > 0) {
			printf ("H狗带了!\n");
			Sleep(5000);
			if (Aw) {
				a[x][y] = ' ';
				x = 2, y = 2;
				a[x][y] = 'H';
				if (p == x && q == y) {
					p = 5, q = 9;
					a[p][q] = 'R';
				}
				return 99;
			} else {
				return 1;
			}
		}
		if (P2s <= 0 && P1s > 0) {
			printf ("R狗带了!\n");
			Sleep(5000);
			if (Ww) {
				a[p][q] = ' ';
				p = 4, q = 17;
				a[p][q] = 'R';
				if (p == x && q == y) {
					x = 1, y = 9;
					a[x][y] = 'H';
				}
				return 99;
			} else {
				return 2;
			}
		}
		if (P2s <= 0 && P1s <= 0) {
			printf ("都狗带了!\n");
			Sleep(5000);
			if (Ww && Aw) {
				a[p][q] = ' ';
				p = 4, q = 17;
				a[p][q] = 'R';
				a[x][y] = ' ';
				x = 2, y = 2;
				a[x][y] = 'H';
				return 99;
			}
			if (Ww && !Aw) {
				return 2;
			}
			if (!Ww && Aw) {
				return 1;
			}
			if (!Ww && !Aw) {
				return 3;
			}
		}
	}
}

void win(int g) {
	if (g == 1) {
		printf("\'R\' 赢了!\n");
		Sleep(5000);
		system("pause");
	} else {
		if (g == 2) {
			printf("\'H\' 赢了!\n");
			Sleep(5000);
			system("pause");
		} else {
			printf("平局!\n");
			Sleep(5000);
			system("pause");
		}
	}
}

void rans() {
	int f = rand() % 2;
	a[sx][sy] = ' ';
	sx = 35, sy = 35;
	switch (f) {
		case 0:
			sx = 5, sy = 1;
			break;
		case 1:
			sx = 1, sy = 18;
			break;
	}
	a[sx][sy] = 'S';
}

void rang() {
	int ff = rand() % 3;
	a[gx][gy] = ' ';
	gx = 35, gy = 35;
	switch (ff) {
		case 0:
			gx = 2, gy = 15;
			break;
		case 1:
			gx = 2, gy = 8;
			break;
		case 2:
			gx = 4, gy = 10;
			break;
	}
	a[gx][gy] = 'N';
}

void ranf() {
	int fff = rand() % 3;
	a[fx][fy] = ' ';
	fx = 35, fy = 35;
	switch (fff) {
		case 0:
			fx = 2, fy = 10;
			break;
		case 1:
			fx = 4, fy = 4;
			break;
		case 2:
			fx = 4, fy = 8;
			break;
	}
	a[fx][fy] = 'F';
}

int main() {
	system("title 起床战争");
	SetFont(25);
	srand(time(NULL));
	system("color 0a");
	xuan();
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	CONSOLE_CURSOR_INFO CursorInfo;
	GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息
	CursorInfo.bVisible = false; //隐藏控制台光标
	SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态
	out();
	ranf();
	rang();
	rans();
	while (1) {
		if (GetAsyncKeyState('S')) {
			if (a[x + 1][y] != 'O') {
				a[x][y] = ' ';
				x++;
				a[x][y] = 'H';
			}
		}
		if (GetAsyncKeyState('D')) {
			if (a[x][y + 1] != 'O') {
				a[x][y] = ' ';
				y++;
				a[x][y] = 'H';
			}
		}
		if (GetAsyncKeyState('A')) {
			if (a[x][y - 1] != 'O') {
				a[x][y] = ' ';
				y--;
				a[x][y] = 'H';
			}
		}
		if (GetAsyncKeyState('W')) {
			if (a[x - 1][y] != 'O') {
				a[x][y] = ' ';
				x--;
				a[x][y] = 'H';
			}
		}

		if (GetAsyncKeyState('K')) {
			if (a[p + 1][q] != 'O') {
				a[p][q] = ' ';
				p++;
				a[p][q] = 'R';
			}
		}
		if (GetAsyncKeyState('L')) {
			if (a[p][q + 1] != 'O') {
				a[p][q] = ' ';
				q++;
				a[p][q] = 'R';

			}
		}
		if (GetAsyncKeyState('J')) {
			if (a[p][q - 1] != 'O') {
				a[p][q] = ' ';
				q--;
				a[p][q] = 'R';
			}
		}
		if (GetAsyncKeyState('I')) {
			if (a[p - 1][q] != 'O') {
				a[p][q] = ' ';
				p--;
				a[p][q] = 'R';
			}
		}

		if (x == p && y == q) {
			int jie = zhan();
			if (jie == 1) {
				win(1);
				break;
			} else {
				if (jie == 2) {
					win(2);
					break;
				} else {
					if (jie < 99) {
						win(3);
						break;
					}
				}
			}
		}

		if (x == c && y == b) {
			a[c][b] = ' ';
			c = 48, b = 49;
			Ww = false;
		}
		if (p == n && q == m) {
			a[n][m] = ' ';
			n = 39, m = 35;
			Aw = false;
		}

		if (c == p && b == q && Ww) {
			a[c][b] = 'R';
			while (1) {
				if (!(c == p && b == q))
					a[c][b] = 'W';
				break;
			}
		} else {
			a[c][b] = 'W';
		}
		if (n == x && m == y && Aw) {
			a[n][m] = 'H';
			while (1) {
				if (!(n == x && m == y))
					a[n][m] = 'A';
				break;
			}
		} else {
			a[n][m] = 'A';
		}

		if (sx == x && sy == y) {
			P1.shengming += 5;
			rans();
		}
		if (sx == p && sy == q) {
			P2.shengming += 5;
			rans();
		}

		if (gx == x && gy == y) {
			P1.gongji += 5;
			rang();
		}
		if (gx == p && gy == q) {
			P2.gongji += 5;
			rang();
		}

		if (fx == x && fy == y) {
			P1.fangyu += 5;
			ranf();
		}
		if (fx == p && fy == q) {
			P2.fangyu += 5;
			ranf();
		}

		out();
	}
	return 0;
}

说明一下
H:玩家1(WASD移动)

A:H的床

R:玩家2(IJKL移动)

W:R的床

O:墙壁

N:增加攻击

F:增加防御

S:增加生命

有不满请联系我!!!

会逐渐更新...

含泪结束

感谢大家的支持!

求过!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值