我的实训

<p><span style="font-size:14px;">本案例要求制作一个《数字迷宫》的游戏,该游戏的玩法描述为:</span></p><p><span style="font-family:Calibri;font-size:14px;">1、</span> <span style="font-size:14px;">系统主要地图为固定模式</span></p><p><span style="font-family:Calibri;font-size:14px;">2、</span> <span style="font-size:14px;">地图内部包含墙体、走廊、阿拉伯数字<span style="font-family:Calibri;">(1~7)</span>、玩家头像<span style="font-family:Calibri;">(1</span>个<span style="font-family:Calibri;">)</span>四种不同内容</span></p><p><span style="font-family:Calibri;font-size:14px;">3、</span> <span style="font-size:14px;">用户通过上、下、左、右按键来控制玩家头像在地图范围内的走动</span></p><p><span style="font-family:Calibri;font-size:14px;">4、</span> <span style="font-size:14px;">在玩家走动过程中,碰撞墙壁时,该步的走动无效,玩家头像原地不变</span></p><p><span style="font-family:Calibri;font-size:14px;">5、</span> <span style="font-size:14px;">玩家允许在设计走廊内部进行走动</span></p><p><span style="font-family:Calibri;font-size:14px;">6、</span> <span style="font-size:14px;">玩家头像遇到阿拉布数字时,数字消失,并且对玩家走动无影响</span></p><p><span style="font-family:Calibri;font-size:14px;">7、</span> <span style="font-size:14px;">玩家头像遭遇所有数字之后<span style="font-family:Calibri;">(</span>地图上无阿拉伯数字<span style="font-family:Calibri;">)</span>,该局游戏结束,并自动开始下一局游戏</span></p><p><span style="font-family:Calibri;font-size:14px;">8、</span> <span style="font-size:14px;">在某一局游戏中,游戏走廊、墙体与其他游戏相同,但数字位置会随机产生</span></p><p><span style="font-family:Calibri;font-size:14px;">9、</span> <span style="font-size:14px;">阿拉伯数字产生在走廊内而非墙体上</span></p><p><span style="font-family:Calibri;font-size:14px;">10、</span>  <span style="font-size:14px;">在玩家游戏过程中按下<span style="font-family:Calibri;"><span style="font-family:Arial;font-size:12px;">E</span>sc</span>键,游戏无条件退出。</span></p><p><span style="font-family:Calibri;font-size:14px;">11、</span>  <span style="font-size:14px;">在玩家未使用<span style="font-family:Calibri;">Esc</span>键时,程序正常运行</span></p><p>          1、程序初始</p><p><img src="https://img-blog.csdn.net/20160710162802693?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p>       2、玩家运行</p><p><img src="https://img-blog.csdn.net/20160710162855198?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p>       3、退出</p><p><img src="https://img-blog.csdn.net/20160710162923011?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p>
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include"windows.h"
int positionx,positiony;
int count;
int code[17][24]= {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                   0,-1,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,
                   0,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,-1,0,0,0,0,0,-1,-1,-1,0,0,
                   0,-1,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,-1,0,0,0,0,
                   0,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,0,-1,0,-1,-1,-1,-1,-1,-1,-1,0,0,
                   0,-1,0,0,-1,0,-1,0,0,0,0,-1,0,-1,-1,-1,0,0,0,0,0,0,0,0,
                   0,-1,-1,-1,-1,-1,-1,0,0,0,0,-1,0,0,0,-1,0,0,0,0,0,0,0,0,
                   0,-1,0,0,0,0,0,0,0,0,0,-1,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,0,
                   0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,0,0,-1,0,0,0,0,
                   0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,-1,0,0,-1,0,0,0,0,
                   0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,-1,-1,-1,-1,0,-1,-1,0,
                   0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,-1,0,0,
                   0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,-1,0,0,
                   0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,
                   0,-1,-1,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,
                   0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,
                   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
                  };
void SetCode(int num)
{
    if(num==0)
        printf("■");
    else
    {
        if(num==-1)
            printf("  ");
        else
            printf("%d ",num);
    }
}
void SetNum()
{
    int i,j,k=0;
    srand((unsigned) time(NULL));
    while (k<7)
    {
        i = rand() % 16+2;//
        j = rand() % 23+2;//对坐标的位置产生随机数。
        if(code[i][j]==-1)//当坐标位置为“走廊”时放置1~7的数
        {
            k++;
            code[i][j] = k ;//在随机的坐标上放置固定的数
        }
    }
}
void SetWindow()
{
    int i,j;
    for(i=0; i<17; i++)
    {
        for(j=0; j<24; j++)
        {
            if(i==1&&j==1)
            {
                printf("\1 ");
            }
            else
                SetCode(code[i][j]);
        }
        printf("\n");
    }
}
void GoToXY(int x, int y)
{
    COORD pos = {x,y};
    HANDLE hout =GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hout, pos);//获得标准输出柄(实现对光标的控制)
    printf("\1 ");//
}
void GoToXYSpace(int x,int y)
{
    COORD pos = {x,y};
    HANDLE hout =GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hout, pos);//输出柄
    printf("  ");//在光标原来的地方直接输入“空格“,空格会代替原有的代码
}
void LeftKey()
{
	if(code[positionx][positiony-1]!=0)
	{
		GoToXYSpace(2*positiony,positionx);//坐标的x,y值与数组不同,一个字符的位置等于两个光标所占据的位置
		positiony--;
		GoToXY(2*positiony,positionx);
		if(code[positionx][positiony]>0)
		{
			code[positionx][positiony]=-1;
			count--;//方便计数,记录图中数字的个数;
		}
	}
}
void UpKey()
{
	if(code[positionx-1][positiony]!=0)
	{
		GoToXYSpace(2*positiony,positionx);
		positionx--;
		GoToXY(2*positiony,positionx);
		if(code[positionx][positiony]>0)
		{
			code[positionx][positiony]=-1;
			count--;
		}
	}
}
void DownKey()
{
	if(code[positionx+1][positiony]!=0)
	{
		GoToXYSpace(2*positiony,positionx);
		positionx++;
		GoToXY(2*positiony,positionx);
		if(code[positionx][positiony]>0)
		{
			code[positionx][positiony]=-1;
			count--;
		}
	}
}
void RightKey()
{
	if(code[positionx][positiony+1]!=0)
	{
		GoToXYSpace(2*positiony,positionx);
		positiony++;
		GoToXY(2*positiony,positionx);
		if(code[positionx][positiony]>0)
		{
			code[positionx][positiony]=-1;
			count--;
		}
	}
}
void hidden()//隐藏光标
{
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO cci;
    GetConsoleCursorInfo(hOut,&cci);
    cci.bVisible=0;//赋1为显示,赋0为隐藏
    SetConsoleCursorInfo(hOut,&cci);
}
void Begin()
{
	positionx=1,positiony=1;
	
    system("CLS");//清屏函数
    SetNum();
    SetWindow();
    GoToXY(2*positiony,positionx);
	count=7;
    while(1)
    {
		if(count==0)
			Begin();//当整数的个数为0时,清屏,重新游戏
        char direction;
        while(!kbhit());
        direction = getch();
        switch(direction)//判断方向键
        {
        case 72:
            UpKey();
            break;
        case 80:
            DownKey();
            break;
        case 75:
            LeftKey();
            break;
        case 77:
            RightKey();
            break;
		case 27:
			exit(0);
        }
    }
}
int main()
{
    hidden();
	Begin();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值