大一实训内容c 首发
以图像的形式 实现可视化的游戏过程
有bug但是懒得debug
反正比其他组高一个level 选择这个课题的都是希望接受挑战的 我也是如此
学弟学妹仅供参考
有问题可以+q1277299259 备注骑士飞行棋 我可以给你实习报告来参考
#include <stdio.h>
#include <stdlib.h>
#include<windows.h>
#include<time.h>
#define p
void Title();
void MapDraw();
void Rule();
void transfer(int n);//using in Mapdraw
void Mapdraw();
void quickMapdraw();
void slowMapdraw();
void p1Cover(int temp,int step);
void p2Cover(int temp,int step);
int main()
{
int map1[100]={0,0,0,0,0,2,4,0,0,1,0,0,0,2,0,0,0,2,0,0,3,0,0,4,0,3,0,1,0,0,0,0,0,2,0,0,0,0,2,0,4,0,0,0,0,3,0,0,0,0,2,0,0,0,0,4,0,0,0,0,1,0,0,3,2,0,0,0,0,4,
0,0,3,0,0,0,0,0,0,0,2,0,0,4,0,0,0,0,3,0,3,0,0,1,2,0,0,0,0,0,};
Title();
system("cls");
Rule();
Sleep(1000);
getchar(p);
system("cls");
slowMapdraw();
int step1=0,step2=0;
while(step1<99||step2<99)//最外层大循环
{
//printf("\033[%d;%dH",12,1);
printf("\n请P1按下回车生成你的骰子数……");
char ch=getchar();
system("cls");
srand((unsigned)time(NULL));//随机数生成种子
int temp=rand()%6+1;
printf("请走");printf("%d",temp);printf("步\n");
Sleep(500);
quickMapdraw();
p1Cover(temp,step1);
step1+=temp;
///
printf("\033[%d;%dH",12,1);
switch(map1[step1-1])
{
case 0:
if(step1==step2) //判断玩家1 2的位置
{
printf("\n玩家1被炸飞了!\n");
Sleep(500);
step1=0;//玩家1从头开始
printf("玩家1,你当前的位置为%d\n");
Sleep(1000);
}
break;
case 1:
if(step1==step2) //判断玩家1 2的位置
{
printf("\n玩家1被炸飞了!\n");
step1=0;//玩家1从头开始
printf("玩家1,你当前的位置为%d\n", step2);
}
printf("\n 玩家1 你多了一次掷骰子的机会\n");
//玩家2多进行一次行动
printf("请P2按下回车生成你的骰子数……");
char ch2=getchar();
temp=rand()%6+1;
printf("请走");printf("%d",temp);printf("步\n");
Sleep(1000);
quickMapdraw();
p1Cover(temp,step1);
step1+=temp;
break;
case 2:
printf("\n有地雷,快退后! \n");
Sleep(1000);
if(step2>=6)
step2-=6;
else step2=0;
printf("\n玩家2,你当前的位置为%d\n", step1);
if(step1==step2) //判断玩家1 2的位置
{
printf("玩家1被炸飞了!\n");
step1=0;//玩家2从头开始
printf("玩家1,你当前的位置为%d\n", step1);
}
Sleep(1000);
break;
case 3:
printf("\n你掉进了时空隧道!\n");
step2+=10;
printf("\n玩家2,你当前的位置为%d\n", step2);
if(step1==step2) //判断玩家1 2的位置
{
printf("\n玩家1被炸飞了!\n");
step1=0;//玩家2从头开始
printf("玩家1,你当前的位置为%d\n", step1);
}
break;
case 4:
printf("\n玩家2,恭喜你来到幸运罗盘!\n");
printf("请做出选择:\n");
printf("1.和对方交换位置\n2.轰炸对方(炸退六步)\n");
int number;
int t;
scanf("%d",&number); //输入选择数
if(number==1) //交换玩家位置
{
t=step1;
step1=step2;
step2=t;
printf("玩家2,你当前的位置为%d\n",step2);
printf("\n玩家1,你当前的位置为%d\n",step1);
}
else if(number==2) //对方退六步
{
map1[step2-1]=10;
if(step1>=6)
{
step1-=6;
}
else step1=0;
printf("玩家1,你当前的位置为%d\n",step1);
break;
}
}
/
//printf("\033[%d;%dH",12,1);
printf("\n请P2按下回车生成你的骰子数……");
char ch2=getchar();
temp=rand()%6+1;
printf("请走");printf("%d",temp);printf("步\n");
Sleep(1000);
quickMapdraw();
p2Cover(temp,step2);
step2+=temp;
///
printf("\033[%d;%dH",12,1);
switch(map1[step2-1])
{
case 0:
if(step1==step2) //判断玩家1 2的位置
{
printf("\n玩家2被炸飞了!\n");
Sleep(500);
step2=0;//玩家2从头开始
printf("玩家2,你当前的位置为%d\n");
}
Sleep(1000);
break;
case 1:
if(step1==step2) //判断玩家1 2的位置
{
printf("\n玩家2被炸飞了!\n");
step2=0;//玩家2从头开始
printf("玩家2,你当前的位置为%d\n", step2);
}
printf("\n 玩家2 你多了一次掷骰子的机会\n");
//玩家2多进行一次行动
printf("请P2按下回车生成你的骰子数……");
char ch2=getchar();
temp=rand()%6+1;
printf("请走");printf("%d",temp);printf("步\n");
Sleep(1000);
quickMapdraw();
p2Cover(temp,step2);
step2+=temp;
Sleep(1000);
break;
case 2:
printf("\n有地雷,快退后! \n");
if(step1>=6)
step1-=6;
else step1=0;
printf("\n玩家1,你当前的位置为%d\n", step1);
if(step1==step2) //判断玩家1 2的位置
{
printf("玩家2被炸飞了!\n");
step2=0;//玩家2从头开始
printf("玩家2,你当前的位置为%d\n", step2);
}
Sleep(1000);
break;
case 3:
printf("\n你掉进了时空隧道!\n");
step1+=10;
printf("\n玩家1,你当前的位置为%d\n", step1);
if(step1==step2) //判断玩家1 2的位置
{
printf("\n玩家2被炸飞了!\n");
step2=0;//玩家2从头开始
printf("玩家2,你当前的位置为%d\n", step2);
}
Sleep(1000);
break;
case 4:
printf("\n玩家1,恭喜你来到幸运罗盘!\n");
printf("请做出选择:\n");
printf("1.和对方交换位置\n2.轰炸对方(炸退六步)\n");
int number;
int t;
scanf("%d",&number); //输入选择数
if(number==1) //交换玩家位置
{
t=step1;
step1=step2;
step2=t;
printf("玩家1,你当前的位置为%d\n",step1);
printf("\n玩家2,你当前的位置为%d\n",step2);
}
else if(number==2) //对方退六步
{
map1[step1-1]=10;
if(step2>=6)
{
step2-=6;
}
else step2=0;
printf("玩家2,你当前的位置为%d\n",step2);
Sleep(1000);
break;
}
}
/
}
printf("game over");
return 0;
}
void Title()
{
int x,y;
char *str="※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n|| ||\n|| ||\n|| 骑 士 飞 行 棋 ||\n|| ||\n|| ||\n※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n\n~~~~~~~两人对战~~~~~~~\n请选择角色:1.常航 2.杰瑞米尔德3.肯尼迪4.巴特利\n请玩家P1选择玩家:\n请玩家P2选择玩家:\n";
while(*str){
putchar(*str++);
Sleep(1);
}
printf("\033[%d;%dH",13,19);//光标
scanf("%d",&x);
printf("\033[%d;%dH",14,19);
scanf("%d",&y);
system("cls");
char *str1=("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n|| ||\n|| ||\n||~~~~~~~~~~Game Begin~~~~~~~~~~||\n|| ||\n|| ||\n※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n\n");
while(*str1){
putchar(*str1++);
Sleep(1);
}
}
void Rule(){
char *str=("游戏规则同传统飞行棋一样\n¤代表幸运转盘,可以选择与对方交换位置或者对方后退6步。\n★代表地雷,踩到地雷直接后退6步。\n〓代表时空隧道,可以前进10步。\n■代表暂停,下一轮停止投掷骰子。\n∷代表普通,无任何效果。\n");
while(*str){
putchar(*str++);
Sleep(1);
}
Sleep(500);
}
void transfer(int n){
switch(n){
case 0:
printf("∷ ");
break;
case 1:
printf("■ ");
break;
case 2:
printf("★ ");
break;
case 3:
printf("〓");//No SPACE!!!
break;
case 4:
printf("¤ ");
break;
}
}
void slowMapdraw(){
//0normal 1 pause 2 damn 3timemachine 4lucky
int map[100]={0,0,0,0,0,2,4,0,0,1,0,0,0,2,0,0,0,2,0,0,3,0,0,4,0,3,0,1,0,0,0,0,0,2,0,0,0,0,2,0,4,0,0,0,0,3,0,0,0,0,2,0,0,0,0,4,0,0,0,0,1,0,0,3,2,0,0,0,0,4,
0,0,3,0,0,0,0,0,0,0,2,0,0,4,0,0,0,0,3,0,3,0,0,1,2,0,0,0,0,0,};
int i=0;
printf(" Knight AeroPlane Chess \n");
Sleep(5);
while(i<31){ //横行
transfer(map[i]);
Sleep(1);
i++;
}
int line=3;
while(i<35){ //右竖行
printf("\033[%d;%dH",line,61);
transfer(map[i]);
printf("\n");
i++;
line++;
Sleep(1);
}
int cnt=61;//定义列的位置
while(i<66) //中间行
{
printf("\033[%d;%dH",7,cnt);
transfer(map[i]);
Sleep(1);
i++;
cnt-=2;
}
printf("\n");
while(i<69)
{
transfer(map[i]);
printf("\n");
Sleep(1);
i++;
}
while(i<100){
transfer(map[i]);
Sleep(1);
i++;
}
return 0;
}
void quickMapdraw(){
//0normal 1 pause 2 damn 3timemachine 4lucky
int map[100]={0,0,0,0,0,2,4,0,0,1,0,0,0,2,0,0,0,2,0,0,3,0,0,4,0,3,0,1,0,0,0,0,0,2,0,0,0,0,2,0,4,0,0,0,0,3,0,0,0,0,2,0,0,0,0,4,0,0,0,0,1,0,0,3,2,0,0,0,0,4,
0,0,3,0,0,0,0,0,0,0,2,0,0,4,0,0,0,0,3,0,3,0,0,1,2,0,0,0,0,0,};
int i=0;
printf(" Knight AeroPlane Chess \n");
Sleep(5);
while(i<31){ //横行
transfer(map[i]);
i++;
}
int line=3;
while(i<35){ //右竖行
printf("\033[%d;%dH",line,61);
transfer(map[i]);
printf("\n");
i++;
line++;
}
int cnt=61;//定义列的位置
while(i<66) //中间行
{
printf("\033[%d;%dH",7,cnt);
transfer(map[i]);
i++;
cnt-=2;
}
printf("\n");
while(i<69)
{
transfer(map[i]);
printf("\n");
i++;
}
while(i<100){
transfer(map[i]);
i++;
}
return ;
}
void p1Cover(int temp,int step){//temp就是随机数 step是现在的步数
int t=temp;
while(temp--)
{
if(step<31)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",2,step*2+1);
Sleep(500);
printf("●");
Sleep(500);
step++;
}
else if(step==31)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",3,61);
Sleep(500);
printf("●");
Sleep(500);
step++;
}
else if(step==32)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",4,61);
Sleep(500);
printf("●");
Sleep(500);
step++;
}
else if(step==33)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",5,61);
Sleep(500);
printf("●");
Sleep(500);
step++;
}
else if(step==34)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",6,61);
Sleep(500);
printf("●");
Sleep(500);
step++;
}
else if(step>34)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",7,63-(step-35)-(t-temp));//以61列为基准产生的想法;
Sleep(500);
printf("●");
Sleep(500);
step++;
}
else if(step==66)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",8,1);
Sleep(500);
printf("●");
Sleep(500);
step++;
}
else if(step==67)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",9,1);
Sleep(500);
printf("●");
Sleep(500);
step++;
}
else if(step==68)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",10,1);
Sleep(500);
printf("●");
Sleep(500);
step++;
}
else if(step>69)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",11,(t-temp)+(step-68)+1);
Sleep(500);
printf("●");
Sleep(500);
step++;
}
}
return ;
}
void p2Cover(int temp,int step){//temp就是随机数 step是现在的步数
int t=temp;
while(temp--)
{
if(step<31)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",2,step*2+1);
Sleep(500);
printf("○");
Sleep(500);
step++;
}
else if(step==31)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",3,61);
Sleep(500);
printf("○");
Sleep(500);
step++;
}
else if(step==32)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",4,61);
Sleep(500);
printf("○");
Sleep(500);
step++;
}
else if(step==33)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",5,61);
Sleep(500);
printf("○");
Sleep(500);
step++;
}
else if(step==34)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",6,61);
Sleep(500);
printf("○");
Sleep(500);
step++;
}
else if(step>34)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",7,63-(step-35)-(t-temp));//以61列为基准产生的想法;
Sleep(500);
printf("○");
Sleep(500);
step++;
}
else if(step==66)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",8,1);
Sleep(500);
printf("○");
Sleep(500);
step++;
}
else if(step==67)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",9,1);
Sleep(500);
printf("○");
Sleep(500);
step++;
}
else if(step==68)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",10,1);
Sleep(500);
printf("○");
Sleep(500);
step++;
}
else if(step>69)
{
system("cls");
quickMapdraw();
printf("\033[%d;%dH",11,(t-temp)+(step-68)+1);
Sleep(500);
printf("○");
Sleep(500);
step++;
}
}
return ;
}