下面是一个有趣的文字小游戏
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <cstring>
#include <string>
#include <cstdio>
#define clear() cout << "\033c" << flush
using namespace std;
const int SIZE = 9;
int Queen[15][15];
// 值为0表示不在攻击范围内,可以放置新皇后;
// 1表示在攻击范围内,不可放置
// 9和-9表示皇后
// 游戏规则展示
void intro()
{
cout << endl <<" 生化危机 "<<endl<<endl<<"\n"<<endl;
cout << "===============================================================================" << endl;
cout << " ***欢迎运行生化危机游戏!***" << endl;
cout << "游戏背景:"<<endl;
cout << " 公元5794年,人类与AI分为两个族群,并企图使用辐射与核弹消灭对方,\n 而你,则是此次行动的首席指挥官。"<<endl;
cout << "游戏规则:" << endl;
cout << " 在这个游戏里会有一个 9*9 的地图,我们可以在地图上放置辐射¤(AI为核弹○)," << endl;
cout << " 使其不能相互感染,即任意两个生化武器不能处于地图的同一行、同一列和同一条对角线上。" << endl;
cout << " 1. 如果一方放置生化武器时位于其他生化武器的攻击范围内,该方失败,游戏结束!" << endl;
cout << " 2. 若您不能进行任何放置,游戏结束!" << endl;
cout << " 3. 玩的开心,切记:不许进行开挂、删、改代码等操作。"<<endl;
cout << "===============================================================================" << endl << endl;
}
// 打印当前棋盘
void drawBoard()
{
// 输出行号
cout << " ";
for (int i = 1; i <= SIZE; i++) cout << " " << i;
cout << "\n";
// 输出上边框
cout << " ╔";
for (int i = 1; i <= SIZE-1; i++) cout << "═══╤";
cout << "═══╗\n";
// 输出中间部分
for (int i = 1; i <= SIZE; i++) // 行
{
cout << i << " ║";
for (int j = 1; j <= SIZE; j++) // 列
{
if (Queen[i][j] == 9) // 玩家
{
cout << " ¤";
}
if (Queen[i][j] == -9) // 电脑
{
cout << " ○";
}
if (Queen[i][j] == 0 || Queen[i][j] == 1) // 空格或不可放置
{
cout << " ";
}
if (j != SIZE)
cout << "│";
else
cout << "║";
}
cout << " \n";
// 输出下边框
if (i != SIZE)
{
cout << " ╟";
for (int i = 1; i <= SIZE-1; i++) cout << "───┼";
cout << "───╢\n";
}
else
{
cout << " ╚";
for (int i = 1; i <= SIZE-1; i++) cout << "═══╧";
cout << "═══╝\n";
}
}
}
// 判断一次放置皇后是否有效
bool isValid(int hang, int lie)
{
if (Queen[hang][lie] != 0)
return false;
return true;
}
// 放置皇后、标记皇后的攻击范围
void mark(int who, int hang, int lie) // who为9表示玩家,-9表示电脑
{
// 划定攻击范围
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= 9; j++)
{
// 跳过已经不能放置的位置
if (Queen[i][j] != 0) continue;
// 判断是否在皇后所管辖的 行
if (hang - i == 0 && lie - j != 0)
{
Queen[i][j] = 1;
}
// 判断是否在皇后所管辖的 列
if (hang - i != 0 && lie - j == 0)
{
Queen[i][j] = 1;
}
// 判断是否在皇后所管辖的 左右斜线
if (abs(hang - i) == abs(lie - j))
{
Queen[i][j] = 1;
}
}
}
// 放置皇后
if (who == 9) Queen[hang][lie] = 9;
else Queen[hang][lie] = -9;
}
// 开始游戏
void game()
{
cout << "【人类先开始战争!】" << endl << endl;
while (true)
{
// (1)玩家策略
cout << "请人类输入投放地点(投放地点格式: 行=x[space]列=y[enter])" << endl;
int hang1, lie1;
cin >> hang1 >> lie1;
if (isValid(hang1, lie1) == false) // 该位置不可放置
{
cout << "·你·失·败·了·" << endl;
exit(0);
}
else
{
// 放置后标记皇后的攻击范围
mark(9, hang1, lie1);
// 打印放置结果
drawBoard();
}
// (2)电脑策略
srand(time(0));
int hang2, lie2;
for (int i = 1; i <= 1000000; i++)
{
hang2 = rand() % 9 + 1;
lie2 = rand() % 9 + 1;
if (isValid(hang2, lie2) == false) continue;
else break;
}
if (isValid(hang2, lie2) == false)
{
cout << "AI不能在任何位置投放,恭喜玩家胜利!游戏结束" << endl;
exit(0);
}
else
{
// 放置后标记皇后的攻击范围
mark(-9, hang2, lie2);
cout << "AI在 (" << hang2 << ", " << lie2 << ") 处放置核弹." << endl;
cout << "按下回车,查看AI的核弹投放处…" << endl;
getchar();
getchar();
// 打印放置结果
drawBoard();
}
}
}
int main()
{
intro(); // 游戏规则展示
drawBoard(); // 打印棋盘
game(); // 开始游戏
return 0;
}
还有这个(跳跃的心)
贪吃蛇:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <Windows.h>
#include <time.h>
#include <conio.h> /*键盘输入获取*/
bool gameOver;
bool stop = false;
bool hit = false;
/*游戏的边框大小*/
const int width = 50;
const int height = 20;
/*蛇的坐标,食物的坐标还有分数*/
int x,y,fruitX,fruitY,score;
/*蛇每个点的坐标*/
int tailX[200],tailY[200];
/*蛇的默认长度*/
int ntail=3;
typedef enum
{
STOP = 0,
LEFT,
RIGHT,
UP,
DOWN
}Direction;
Direction Dir;
/*开始菜单*/
void menu()
{
int a;
printf("------------------------------------------------------------------\n");
printf("| 贪吃蛇游戏 |\n");
printf("| 1) 新游戏 |\n");
printf("| 2) 开始边界 |\n");
printf("| 3) 退出游戏 |\n");
printf("------------------------------------------------------------------\n");
printf("---->请输入你的选择:");
scanf("%d", &a);
}
/*初始化状态*/
void setup()
{
gameOver = false;
/*根据当前时间设置“随机数种子”*/
srand(time(NULL));
Dir = STOP;
/*贪吃蛇的位置,固定在中间*/
x= width/2;
y= height/2;
/*食物的位置,位置是随机的*/
fruitX = rand()%width;
fruitY = rand()%height;
score = 0;
}
/*绘制界面*/
void draw()
{
if(stop == true)
{
return;
}
system("cls");/*清除屏幕*/
printf("分数:%d",score);
printf("\n");
/*第一行*/
int i;
for(i= 0 ;i<width+1;i++)
{
printf("-");
}
printf("\n");
/*画中间的画面*/
int p;
for(p= 0 ;p<height;p++)/*高度*/
{
int q;
for(q= 0 ;q<width;q++)/*宽度*/
{
/*第一行最后已给字符*/
if(q==0 || q==width-1)
{
printf("|");
}
if(p == fruitY && q == fruitX)/*食物的随机坐标*/
{
printf("O");
}
else
{
int k=0;
bool print = false;
/*贪吃蛇的长度 默认长度是 3*/
for(k=0;k<ntail;k++)
{
if(tailX[k]==q && tailY[k]==p)
{
printf("*");
print = true;
}
}
/*如果这个位置打印了 * 就不要打印空格了*/
if(!print)
{
printf(" ");
}
}
}
printf("\n");
}
/*最后一行*/
int j;
for(j= 0 ;j<width+1;j++)
{
printf("-");
}
}
/*按键输入控制*/
void input()
{
if(_kbhit())
{
/*获取键盘的输入字符*/
switch(_getch())
{
case '4':
case 75:/*左键*/
Dir = LEFT;
hit= true;
break;
case '8':
case 72:/*上键*/
Dir = UP;
hit= true;
break;
case '6':
case 77:/*右键*/
Dir = RIGHT;
hit= true;
break;
case '2':
case 80:/*向下键盘键 */
Dir = DOWN;
hit= true;
break;
case 'x':
case 27:/*ESE*/
gameOver = true;
break;
case 32:/*空格 暂停键*/
stop = !stop;
break;
}
}
else if(!hit && stop == false)/*如果没有改变方向*/
{
x++;
}
}
/*判断贪吃蛇的长度*/
void logic()
{
if(stop == true)
{
return;
}
/*把上一个位置记下*/
int lastX = tailX[0];
int lastY = tailY[0];
int last2X, last2Y;
/*重新获取当前的位置*/
tailX[0]=x;
tailY[0]=y;
int i=0;
/*遍历整条蛇的长度 把 0 的位置空出来,其余蛇的位置往后面的空间移动*/
for(i=1; i<ntail;i++)
{
last2X = tailX[i];
last2Y = tailY[i];
tailX[i]=lastX;
tailY[i]=lastY;
lastX = last2X;
lastY = last2Y;
}
/*根据方向来改变x y 的值*/
switch(Dir)
{
case UP:
y--;
break;
case DOWN:
y++;
break;
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
}
if(x<0 || width<x || y<0 || height<y)
{
gameOver = true;
/*清除屏幕*/
system("cls");
printf("------------------------------------------------------------------\n");
printf("| |\n");
printf("| |\n");
printf("| 游戏结束 |\n");
printf("| |\n");
printf("| |\n");
printf("------------------------------------------------------------------\n");
}
if(x==fruitX && y==fruitY)
{
/*吃了一个食物,蛇的长度增加1*/
ntail++;
score+=10;
/*更新下一个食物的位置*/
fruitX = rand()%width;
fruitY = rand()%height;
}
}
int main()
{
#if 0
while(1)
{
printf("%d\n",_getch());
}
#endif
menu();
setup();
draw();
/*循环画贪吃蛇的界面*/
while(!gameOver)
{
draw();
input();
logic();
Sleep(70);
}
return 0;
}