做题时的智商:monkey
编游戏的智商:爱因斯坦*100
呵呵呵~~~
回归正题,今天我们来用C++写MC的偏经典联机游戏:攻守战!
顺便宣传一下我的洛谷首页,有一些我自己出的题、题单和团队!逃
#include <bits/stdc++.h>
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <cmath>
#include <windows.h>
#include <cstdlib>
#include <cstdio>
#include <stdio.h>
#include <algorithm>
#include <conio.h>
#include <string>
#include <string.h>
#include <math.h>
#define w(x) while(x)
#define cl system("cls")
#define Sl(x) Sleep(x)
using namespace std;
char a[50][50] = {"OOOOOOOOOOOOOOOOOOOOOOOOO",
"O WO",
"O O O",
"OH OOOOO R WO",
"O O O",
"O WO",
"OOOOOOOOOOOOOOOOOOOOOOOOO",
};
struct Player {
int shengming, gongji, fangyu;
};
Player P1, P2;
bool W1 = true, W2 = true, W3 = true;
int x = 3, y = 1, p = 3, q = 21, n = 1, m = 23, c = 3, b = 23, f = 5, j = 23, sx = 30, sy = 30, gx = 30, gy = 30, fx = 30, fy = 30;
int ttt;
void out() {
cl;
for (int i = 0; i <= 7; i++) {
for (int j = 0; j <= 24; j++) {
printf ("%c", a[i][j]);
}
printf (" ");
switch (i) {
case 0:
printf ("H:玩家1(WASD移动)");
break;
case 1:
printf ("R:玩家2(IJKL移动)");
break;
case 2:
printf ("W:R的床");
break;
case 3:
printf ("O:墙壁");
break;
case 4:
printf ("N:增加攻击");
break;
case 5:
printf ("F:增加防御");
break;
case 6:
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 (W1) {
printf ("床W1:YES\n");
} else {
printf ("床W1:NO\n");
}
if (W2) {
printf ("床W2:YES\n");
} else {
printf ("床W2:NO\n");
}
if (W3) {
printf ("床W3:YES\n");
} else {
printf ("床W3:NO\n");
}
printf ("剩余时间(毫秒):%d\n", 100000 - clock() + ttt);
}
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");
Sl(1000);
a[p][q] = ' ';
p = 3, q = 21;
a[p][q] = 'R';
a[x][y] = ' ';
x = 3, y = 1;
a[x][y] = 'H';
return 100;
}
if (P1s <= 0 && P2s > 0) {
printf ("H狗带了!\n");
Sl(3000);
a[x][y] = ' ';
x = 3, y = 1;
a[x][y] = 'H';
}
if (P2s <= 0 && P1s > 0) {
printf ("R狗带了!\n");
Sl(3000);
if (W1 || W2 || W3) {
a[p][q] = ' ';
p = 4, q = 17;
a[p][q] = 'R';
if (p == x && q == y) {
x = 3, y = 9;
a[x][y] = 'H';
}
return 99;
} else {
return 2;
}
}
if (P2s <= 0 && P1s <= 0) {
printf ("都狗带了!\n");
Sl(3000);
if (W1 || W2 || W3) {
a[x][y] = ' ';
x = 3, y = 1;
a[x][y] = 'H';
a[p][q] = ' ';
p = 4, q = 17;
a[p][q] = 'R';
if (p == x && q == y) {
a[x][y] = ' ';
x = 3, y = 9;
a[x][y] = 'H';
}
return 99;
} else {
return 2;
}
}
}
}
void win(int g) {
if (g == 1) {
printf("R赢了!\n");
Sl(3000);
system("pause");
} else {
printf("H赢了!\n");
Sl(3000);
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 = 15;
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 = 13;
break;
case 1:
gx = 2, gy = 11;
break;
case 2:
gx = 4, gy = 11;
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 = 17;
break;
case 2:
fx = 4, fy = 13;
break;
}
a[fx][fy] = 'F';
}
void Start() {
puts("欢迎来玩攻守战!!!");
Sl(1000);
puts("yuexingfei出品,必属精品!");
Sl(1000);
puts("请按任意键开始游戏...");
getch();
cl;
puts ("Loading......");
Sl(2000);
cl;
int o = 0;
for (int i = 1; i <= 200; i++) {
printf ("已加载%d个文件,进度%d", i, o);
cout << "%\n";
if (i % 2 == 0) {
o++;
}
Sl(1);
if (rand() % 15 == 9) {
Sl(4);
}
cl;
}
}
void SetConsoleWindowSize( SHORT width, SHORT height ) {
HANDLE hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SMALL_RECT wrt = { 0, 0, width - 1, height - 1 };
SetConsoleWindowInfo( hStdOutput, TRUE, &wrt );
COORD coord = { width, height };
SetConsoleScreenBufferSize( hStdOutput, coord );
}
int main() {
system("title 起床战争");
SetFont(25);
SetConsoleWindowSize(53, 25);
srand(time(NULL));
system("color 0a");
Start();
cl;
printf ("规则:\n有时间限制\n攻方在规定时间内破坏守方的三个床就算赢\n守方要在规定时间内守住三个床,只要规定时间结束后还有床没有被攻方破坏就算赢\n");
system("pause");
cl;
xuan();
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息
CursorInfo.bVisible = false; //隐藏控制台光标
SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态
ttt = clock();
out();
ranf();
rang();
rans();
w(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 (clock() - ttt >= 100000) {
if (W1 || W2 || W3) {
win(2);
} else {
win(1);
}
break;
}
if (x == p && y == q) {
int jie = zhan();
if (jie == 2) {
win(2);
break;
}
}
if (x == n && y == m) {
W1 = false;
n = 48, m = 49;
}
if (x == c && y == b) {
W2 = false;
c = 48, b = 49;
}
if (x == f && y == j) {
W3 = false;
f = 48, j = 49;
}
if (p == n && q == m && W1) {
a[n][m] = 'R';
while (1) {
if (!(p == n && q == m))
a[n][m] = 'W';
break;
}
} else {
a[n][m] = 'W';
}
if (p == c && q == b && W2) {
a[c][b] = 'R';
while (1) {
if (!(p == c && q == b))
a[c][b] = 'W';
break;
}
} else {
a[c][b] = 'W';
}
if (p == f && q == j && W3) {
a[f][j] = 'R';
while (1) {
if (!(p == f && q == j))
a[f][j] = 'W';
break;
}
} else {
a[f][j] = 'W';
}
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;
}