前言
今天发了4篇博客了!!
本游戏为自编!
粉丝有6个了!(开心)谢谢!!!
今天发一个数字类战争游戏
#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>
using namespace std;
struct Info {
int num, di; //di:地盘 (1:绿 | 2:黄 | 0:无)
} a[6];
int y = 2, g = 2, w = 1, opt;//y:黄色地盘 | g:绿色地盘 | w:无人地盘
bool err1, err2;
void init() {
for (int i = 1; i <= 5; i++) {
a[i].num = rand() % 6 + 1;
}
a[1].di = a[2].di = 1;
a[3].di = 0;
a[4].di = a[5].di = 2;
}
void out() {
system("cls");
printf ("地图:\n**************\n");
for (int i = 1; i <= 5; i++) {
switch (a[i].di) {
case 1:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
break;
case 2:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
break;
default:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
break;
}
if (a[i].num < 0)
a[i].num = 0;
printf ("%d ", a[i].num);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
}
printf ("\n**************\n");
}
void tian() {
Sleep(1000);
printf ("天降神兵!\n");
Sleep(1500);
system("cls");
int cl = rand() % 5 + 1;
out();
printf ("降在总第%d个兵营,加三个兵!", cl);
Sleep(3000);
a[cl].num += 3;
}
void f1(int n, int l, int m) {//f:绿
a[n].num -= l;
a[m].num += l;
}
void f2() {
if (a[g + 1].di == 0) {
if (a[g].num > a[g + 1].num) {
a[g].num -= a[g + 1].num;
a[g + 1].num = a[g].num;
a[g].num = 0;
a[g + 1].di = 1;
g++;
w--;
} else {
if (a[g].num < a[g + 1].num) {
a[g + 1].num -= a[g].num;
a[g].num = a[g + 1].num;
a[g + 1].num = 0;
a[g].di = 0;
g--;
w++;
} else {
a[g].num = 0;
a[g + 1].num = 0;
}
}
} else {
if (a[g].num > a[g + 1].num) {
a[g].num -= a[g + 1].num;
a[g + 1].num = a[g].num;
a[g].num = 0;
a[g + 1].di = 1;
g++;
y--;
} else {
if (a[g].num < a[g + 1].num) {
a[g + 1].num -= a[g].num;
a[g].num = a[g + 1].num;
a[g + 1].num = 0;
a[g].di = 2;
g--;
y++;
} else {
a[g].num = 0;
a[g + 1].num = 0;
}
}
}
}
void g1(int n, int l, int m) {//g:黄
n = n + g + w;
m = m + g + w;
a[n].num -= l;
a[m].num += l;
}
void g2() {
if (a[g + w].di == 0) {
if (a[g + w + 1].num > a[g + w].num) {
a[g + w + 1].num -= a[g + w].num;
a[g + w].num = a[g + w + 1].num;
a[g + w + 1].num = 0;
a[g + w].di = 2;
y++;
w--;
} else {
if (a[g + w + 1].num < a[g + w].num) {
a[g + w].num -= a[g + w + 1].num;
a[g + w].num = a[g + w + 1].num;
a[g + w + 1].num = 0;
a[g + w + 1].di = 0;
y--;
w++;
} else {
a[g + w + 1].num = 0;
a[g + w].num = 0;
}
}
} else {
if (a[g + w + 1].num > a[g + w].num) {
a[g + w + 1].num -= a[g + w].num;
a[g + w].num = a[g + w + 1].num;
a[g + w + 1].num = 0;
a[g + w].di = 2;
y++;
g--;
} else {
if (a[g + w + 1].num < a[g + w].num) {
a[g + w].num -= a[g + w + 1].num;
a[g + w].num = a[g + w + 1].num;
a[g + w + 1].num = 0;
a[g + w + 1].di = 1;
y--;
g++;
} else {
a[g + w + 1].num = 0;
a[g + w].num = 0;
}
}
}
}
void welcome() {
MessageBox(NULL, TEXT("边 界 之 争"), TEXT("进入"), MB_OK);
MessageBox(NULL, TEXT("本游戏需要两个人互相对抗"), TEXT("提示"), MB_OK);
}
void xin() {
printf (" 新");
Sleep(1500);
printf (" 手");
Sleep(1500);
printf (" 教");
Sleep(1500);
printf (" 程\n");
Sleep(1500);
}
void zheng() {
system("cls");
printf (" 正");
Sleep(1500);
printf (" 式");
Sleep(1500);
printf (" 游");
Sleep(1500);
printf (" 戏\n");
Sleep(1500);
system("cls");
}
bool erro1(int n, int l, int m) {
if (n > g || m > g || a[n].num < l ) {
err1 = false;
return false;
}
return true;
}
bool erro2(int n, int l, int m) {
if (g + w > n + g + w || g + w > m + g + w || a[n + g + w].num < l ) {
err2 = false;
return false;
}
return true;
}
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);
}
int main() {
SetFont(21);
system("color 17");
welcome();
char c;
while (1) {
printf ("是否跳过新手教程?(y/n)\n");
scanf ("%c", &c);
if (c == 'n' || c == 'N' || c == 'y' || c == 'Y')
break;
else
printf ("输入错误!\n");
Sleep(1500);
system("cls");
}
system("color 07");
//新手教程
if (c == 'n' || c == 'N') {
system("cls");
xin();
printf ("一:布局\n");
Sleep(1000);
printf ("共5个地盘,初始绿、黄双方各2个地盘,中间的无人领地1个地盘\n");
Sleep(1000);
printf ("兵营号为本队从左到右数的第几个兵营,数字代表本兵营的兵力,颜色代表阵营(绿色为绿队,灰色为无人领地,黄色为黄色)\n");
system("pause");
system("cls");
printf ("二:输入类型\n");
Sleep(1000);
printf ("输入1:换兵\n");
Sleep(1000);
printf ("输入2:进攻\n");
Sleep(1000);
printf ("输入其他数字:不操作\n");
Sleep(1000);
printf ("提示:要先输入表示操作类型的数字哦~\n");
system("pause");
system("cls");
printf ("三:操作输入\n");
while (1) {
printf("操作输入\"1\":换兵\n");
Sleep(1000);
printf ("首先,输入1表示你要换兵;其次,输入需要调动的兵营号;然后,输入想要调动的兵力的数量;最后,输入要调往的兵营号。\n");
Sleep(2000);
printf("地图:\n**************\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
printf ("9 5 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
printf ("6 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
printf ("6 5");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
printf ("\n**************\n请绿操作!\n\n");
Sleep(2000);
printf ("试着在绿队1号兵营中抽出6个兵移到2号兵营吧!\n");
printf("提示:要先输入数字1,表示你要换兵哦!\n");
int a, b, c, d;
scanf ("%d%d%d%d", &a, &b, &c, &d);
if (a == 1 && b == 1 && c == 6 && d == 2)
break;
else {
printf("输入错误!");
Sleep(1000);
system("cls");
}
}
system("cls");
printf("地图:\n**************\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
printf ("3 11 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
printf ("6 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
printf ("6 5");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
printf ("\n**************\n");
Sleep(1002);
printf ("很好!\n");
Sleep(2500);
system("cls");
while (1) {
printf("操作输入\"2\":进攻\n");
Sleep(1000);
printf("效果:让本队最靠近敌方(包括无人领地)的兵营进攻\n");
Sleep(2000);
printf("分三种情况:\n一:我多敌少,夺得一格地盘,消耗兵力为对方兵力\n");
printf("地图:\n*****\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
printf ("5 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
printf ("3");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
printf ("\n*****\n请绿操作!\n\n");
Sleep(2000);
printf("请输入\"2\"进攻!\n");
int x;
scanf ("%d", &x);
if (x == 2) {
break;
} else {
printf("输入错误!");
Sleep(1000);
system("cls");
}
}
printf("地图:\n*****\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
printf ("2 0");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
printf ("\n*****\n");
Sleep(1000);
printf ("很好!\n");
Sleep(1000);
system("cls");
while (1) {
printf("二:敌多我少,失去一格地盘,本兵营兵力归零,对方兵力消耗为我方兵力\n");
printf("地图:\n*****\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
printf ("2 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
printf ("5");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
printf ("\n*****\n请绿操作!\n\n");
Sleep(2000);
printf("请输入\"2\"进攻!\n");
int x;
scanf ("%d", &x);
if (x == 2) {
break;
} else {
printf("输入错误!");
Sleep(1000);
system("cls");
}
}
printf("地图:\n*****\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
printf ("0 3");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
printf ("\n*****\n");
Sleep(1000);
printf ("很好!\n");
Sleep(1000);
system("cls");
while (1) {
printf("三:敌我相等,地盘不变,双方兵力都归零\n");
printf("地图:\n*****\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
printf ("11 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
printf ("11");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
printf ("\n*****\n请绿操作!\n\n");
Sleep(2000);
printf("请输入\"2\"进攻!\n");
int x;
scanf ("%d", &x);
if (x == 2) {
break;
} else {
printf("输入错误!");
Sleep(1000);
system("cls");
}
}
printf("地图:\n*****\n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
printf ("0 ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);
printf ("0");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
printf ("\n*****\n");
Sleep(1000);
printf ("很好!\n");
Sleep(1000);
system("cls");
printf ("四:获胜条件\n");
Sleep(1000);
printf("谁先占领所有地盘,谁就赢了!\n");
system("pause");
system("cls");
printf("恭喜你,完成了新手教程!\n祝游玩愉快!\n");
system("pause");
}
//正式
system("cls");
zheng();
srand(time(0));
init();
while (1) {
int t = rand() % 4;
if (t == 1)
tian();
while (1) {
err1 = true;
out();
printf ("请绿操作!\n");
scanf ("%d", &opt);
switch (opt) {
case 1://移兵
int n, m, l;
scanf("%d%d%d", &n, &l, &m);
if (erro1(n, l, m))
f1(n, l, m);
break;
case 2://攻击
f2();
break;
}
if (!err1) {
printf ("操作错误!\n");
Sleep(1000);
} else
break;
}
//判断1
if (g == 5) {
out();
Sleep(1000);
system("cls");
MessageBox(NULL, TEXT("恭喜绿胜利了!!!"), TEXT("胜利了!!!"), MB_OK);
break;
} else {
if (y == 5) {
out();
Sleep(1000);
system("cls");
MessageBox(NULL, TEXT("恭喜黄胜利了!!!"), TEXT("胜利了!!!"), MB_OK);
break;
}
}
system("cls");
while (1) {
err2 = true;
out();
printf ("请黄操作!\n");
scanf ("%d", &opt);
switch (opt) {
case 1://移兵
int n, m, l;
scanf("%d%d%d", &n, &l, &m);
if (erro2(n, l, m))
g1(n, l, m);
break;
case 2://攻击
g2();
break;
}
if (!err2) {
printf ("操作错误!\n");
Sleep(1000);
} else
break;
}
//判断2
if (g == 5) {
out();
Sleep(1000);
system("cls");
MessageBox(NULL, TEXT("恭喜绿胜利了!!!"), TEXT("胜利了!!!"), MB_OK);
break;
} else {
if (y == 5) {
out();
Sleep(1000);
system("cls");
MessageBox(NULL, TEXT("恭喜黄胜利了!!!"), TEXT("胜利了!!!"), MB_OK);
break;
}
}
}
system("pause");
return 0;
}
加油更!
求关(会回关)
-------------------------------------------分割线-------------------------------------------------------