很坑爹的小游戏,至于怎么坑爹,嘎嘎~自己研究去吧~!
#include<stdio.h>
#include<windows.h>
#include<iostream>
#include<string.h>
#include<time.h>
using namespace std;
void Loc(int x,int y);/*定位光标*/
void Welcome(); /*创建欢迎界面*/
void BuildMap();/*创建界面*/
void GetNumber();/*获得测试的值n,m,s*/
void Choice(); /*玩家选择是否先手*/
void GameStart();/*开始游戏!*/
void ShowScore();
void End();
int n1,n2,m,s,r,n;/*n1为玩家先手的石子个数,n2为电脑先手的石子个数*/
int YesNo;/*1为玩家先手,2为电脑先手*/
void Loc(int x,int y)
{
COORD pos={x,y};
HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hout,pos);
}
void Welcome()
{
char YesOrNo[10];
Loc(13,3);
printf("如果你已经熟悉游戏规则请输入'Y'跳过规则介绍,否则输入'N':");
scanf("%s",&YesOrNo);
if(YesOrNo[0]=='Y') return;
Loc(13,5);
printf("欢迎测试<博弈的智慧>~下面简述游戏规则:\n");
Sleep(1000);/*延迟*/
Loc(13,7);
Sleep(2000);/*延迟*/
printf("程序给出n个石子以及每次最多能拿走的石子个数m\n");
Loc(13,9);
Sleep(3000);/*延迟*/
printf("玩家可以选择先手或者后手,每次最少拿走1个\n");
Loc(13,11);
Sleep(3000);/*延迟*/
printf("谁拿最后一个石子就获得比赛的胜利!~");
Loc(13,13);
Sleep(2000);
printf("如果赢得了比赛之后会有神秘的奖励哦~");
Sleep(3000);
system("cls");
}
void GetNumber()
{
srand((unsigned int)time(NULL));
m=rand()%8+3;/*获得一个在3~10的随机数*/
r=rand()%5+2;/*生成一个2~6的随机数*/
s=m-2; /*s在1~8内*/
n1=(m+1)*r; /*玩家先手*/
n2=(m+1)*r+s;/*电脑先手*/
}
void Choice()
{
char YesOrNo[10];
Loc(13,7);
printf("你是否选择先手取石子?(输入Y/N):");
scanf("%s",YesOrNo);
if(YesOrNo[0]=='Y') YesNo=1;/*如果选择了先手*/
else YesNo=0;/*选择了后手*/
Loc(15,10);
if(YesNo==1)
printf("你选择了先手取石子!");
else
printf("你选择了后手取石子!");
Sleep(2000);
system("cls");
}
void BuildMap()
{
for(int i=0;i<=50;i+=2)
{
Loc(i,0);
printf("■");
Loc(i,50);
printf("■");
}
for(int i=0;i<=50;i++)
{
Loc(0,i);
printf("■");
Loc(50,i);
printf("■");
}
for(int i=52;i<=70;i+=2)
{
Loc(i,0);
printf("■");
Loc(i,10);
printf("■");
}
for(int i=0;i<=10;i++)
{
Loc(52,i);
printf("■");
Loc(70,i);
printf("■");
}
for(int i=52;i<=70;i+=2)
{
Loc(i,12);
printf("■");
Loc(i,20);
printf("■");
}
for(int i=12;i<=20;i++)
{
Loc(52,i);
printf("■");
Loc(70,i);
printf("■");
}
Loc(55,14);
printf("<博弈的智慧>");
Loc(55,16);
printf("作者:Hsk");
Loc(55,19);
printf("感谢您的使用!");
}
void ShowScore()/*状态栏*/
{
Loc(54,2);
printf("剩余石子个数:%d",n);
Loc(54,4);
printf("最多可拿个数:%d",m);
}
void GameStart()
{
int y1=2,x;/*定位左/右画面的移动*/
if(YesNo==1)
{
n=n1;
}
else
n=n2;
ShowScore();
Sleep(4000);
if(YesNo==0)/*如果电脑先取石子*/
{
n=n-s;
ShowScore();
Loc(2,y1);
printf("电脑取走了%d个石子,还剩余%d个",s,n);
y1+=2;
}
while(n>0)
{
Loc(54,6);
printf("输入取石数:");
scanf("%d",&x);/*玩家取走了x个*/
if(x>m||x<1) /*如果取多了*/
{
Loc(2,y1);
printf("输入错误!请重新输入!");
Loc(65,6);
printf(" ");
continue;
}
n=n-x;
Loc(2,y1);
y1+=2;
printf("玩家取走了%d个石子,还剩余%d个",x,n);
/*下面该电脑取走石子了*/
Sleep(2000);
x=(m+1)-x;
n=n-x;
/*电脑每次只要拿走m+1-x个就是必胜态*/
Loc(2,y1);
y1+=2;
printf("电脑取走了%d个石子,还剩余%d个",x,n);
Loc(65,6);
printf(" ");
}
Loc(2,y1);
printf("你输啦!再来一次吧?赢了会有大礼哦~");
y1+=2;
Loc(2,y1);
printf("是否再来一把?(Y/N):");
}
void End()
{
Loc(13,8);
printf("感觉您的支持~!Thank you!~");
Loc(13,12);
printf("Made by 2013-3-19");
Sleep(3000);
}
int main()
{
char x[10]={'Y'};
do{
Welcome();
GetNumber();
Choice();
BuildMap();
GameStart();
scanf("%s",x);
system("cls");
}while(x[0]=='Y');
Loc(0,50);
End();
return 0;
}