c语言小游戏 走迷宫(取自啊哈C语言)

构建思路

一 迷宫框架

      事先构建好迷宫形状(已定)

         使用打印函数将其构建打印

         

                                 效果如下图

                 

                     

 但如果只是这样的话很难对已经打印的函数进行改变

所以我们可以使用二维数组

结合输出

效果跟上面一样

此外还应标记小球的初始位置和终点位置

 

x,y为小球初始位置的行列下标

p,q,为终点位置的行列下标(当到达时游戏停止)

                                                                                                                                                                                                                                                                                                                                                                                             随机生成(我还不会)

二 如何移动

既然是游戏,就很容易想到用键盘上的键位来控制o的移动

这里要借用一个输入函数getch() 

该函数输入字符后不在屏幕上显示你的输入,即没有外显     

                   

如果‘d’控制向右移动,则改为a[x][y+1]!='#'    y++

其他情况不一一描述

初步实现

由上述

对于多次输入改变位置可以使用while

while(x!=p || y!=q)

q,p为出口的行列下标,注意都是下标

#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
int main()
{
    char arr[10][10]={"######",
                               "#o #  ",
                               "# ## #",
                                "#  # #",
                                "# #   #",
                               "######"
                      };//定义迷宫
    int i,x,y,p,q;
    x=1,y=1,p=1,q=5;//注意每个量代表的含义

    for(int i=0;i<=5;i++)
    {
        puts(arr[i]);//打印迷宫
    }
    char ch;
    while(x!=p || y!=q)//循环输入,注意终止条件
    {
        ch=getch();
        if(ch=='s')
        {
            if(arr[x+1][y]!='#')
            {
                arr[x][y]=' ';
                x++;
                arr[x][y]='o';
            }
        }
        if(ch=='w')
        {
            if(arr[x-1][y]!='#')
            {
                arr[x][y]=' ';
                x--;
                arr[x][y]='o';
            }
        }
         if(ch=='a')
        {
            if(arr[x][y-1]!='#')
            {
                arr[x][y]=' ';
                y--;
                arr[x][y]='o';
            }
        }
         if(ch=='d')
        {
            if(arr[x][y+1]!='#')
            {
                arr[x][y]=' ';
                y++;
                arr[x][y]='o';
            }
        }
        system("cls");//每次移动完记得清屏以便于下次的打印
        for(i=0;i<=5;i++)
        puts(arr[i]);//打印移动后的状态
    }
    system("cls");//游戏结束时清一下
    sleep(5000);
    return 0;

}
 

这是优化后的,因为每次移动后都要重新打印一下

使用system("cls");  这玩意的作用就是清屏,(实际分两种情况作用不同)

sleep(); 该函数可以理解为暂停,单位是毫秒,

以上两个函数记得加上头文件

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值