SDUT骑士飞行棋 KNIGHT-Aeroplane Chess

大一实训内容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 ;
        }
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值