网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月11日漏签0天
c语言吧 关注:798,817贴子:4,356,295
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 15回复贴,共1页
<<返回c语言吧
>0< 加载中...

关于二维数组遇到问题了,求大佬指点一二

  • 只看楼主
  • 收藏

  • 回复
  • 2025UpUp
  • 帕秋莉糕
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
小白在做一个游戏,遇到问题是,我用二维字符串做页面,一个关卡一个二维数组,在按键输入判断时,我就要一个关卡一个按键输入函数,发现写起来好多,于是我想到了中间变量这个主意,在每个关卡中多一个空的数组,用于承载每个关卡,这样我只要一按键函数就够了,在写上if做判断,将所需的关卡赋值给中间变量,就可以减少好多,但是想了好久没有结果,网上找了一些数组复制的例子也没看懂,始终无法实现,可能太笨了,希望有人指点一二。以下是源码,请尽管吐槽不足之处和提修改意见
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
char gamePass[50][50];//变量二位数组,用于临时存放关卡
char firstPass[50][50]={
" ###",//位置算法第一位为0,0
" #*#",//
" # #",
"#######O######",
"#* OH O*#",
"#######O ####",
" # #",
" #*#",
" ###"
};
char secondPass[50][50]={
" ###",
" #*#",
" # #",
"#######O######",
"#* OS O*#",
"######### ####",
" # #",
" # O*#",
" #####"
};
int x,y,i,j,k,l;
int septNuamber=0;//步数统计
int passNumber=0;//关卡数统计
int box=0;//统计箱子完成数量
char key;//存储按键输入键值
void keyboard()//按键检测函数
{
if(key=='W'||key=='w')//向上//1用或是为了兼容大小写字母
{
if(gamePass[x-1][y]=='O')//判断前一位是不是O,是的话进去
{
if(gamePass[x-2][y]=='*')//判断前两位是不是*是的话
{
gamePass[x-2][y]='@';//把它变成@号。犯错,赋值是单个=号不是双==号,没注意看
box++;
}
else
{
gamePass[x-2][y]='O';//不是的话就把它变成字母O
}
}
if(gamePass[x-1][y]!='#' && gamePass[x-1][y]!='@' && gamePass[x-1][y]!='*')//如果前进方向第一位不是#,@和*都可以前挪一位
{
gamePass[x][y]=' ';
x--;
gamePass[x][y]='H';
}
}
if(key=='S'||key=='s')//向下
{
if(gamePass[x+1][y]=='O')
{
if(gamePass[x+2][y]=='*')
{
gamePass[x+2][y]='@';
box++;
}
else
{
gamePass[x+2][y]='O';
}
}
if(gamePass[x+1][y]!='#' && gamePass[x+1][y]!='@' && gamePass[x+1][y]!='*')
{
gamePass[x][y]=' ';
x++;
gamePass[x][y]='H';
}
}
if(key=='A'||key=='a')//向左
{
if(gamePass[x][y-1]=='O')
{
if(gamePass[x][y-2]=='*')
{
gamePass[x][y-2]='@';
box++;
}
else
{
gamePass[x][y-2]='O';
}
}
if(gamePass[x][y-1]!='#' && gamePass[x][y-1]!='@' && gamePass[x][y-1]!='*')
{
gamePass[x][y]=' ';
y--;
gamePass[x][y]='H';
}
}
if(key=='D'||key=='d')//向右
{
if(gamePass[x][y+1]=='O')
{
if(gamePass[x][y+2]=='*')
{
gamePass[x][y+2]='@';
box++;
}
else
{
gamePass[x][y+2]='O';
}
}
if(gamePass[x][y+1]!='#' && gamePass[x][y+1]!='@' && gamePass[x][y+1]!='*')
{
gamePass[x][y]=' ';
y++;
gamePass[x][y]='H';
}
}
};
void yemian()//页面函数//试着用swtich写判断
{
for(i=0;i<=9;i++)//后续要用变量来替换9实现随着关卡变化而变化,减低内存占用
puts(gamePass[i]);//此处犯错,没思考i就是数组的行,写成[i][y]
}
int main()
{
for(i=0;i<=9;i++)
{
//此处是按网上教程试着写,但是报错编译出错 gamePass[i]=firstPass[i];//
}
x=4; y=7;//初始化H位置//试着将坐标即关卡信息存在其中,并读取出来
yemian();//页面刷新函数
while(1)
{
key=getch();
keyboard();
system("cls");
yemian();
printf("当前关卡箱子已到位%d个\n",box);
}
return 0;
}


  • Creme
  • 异能力者
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
什么大佬


2025-06-11 04:05:43
广告
  • _ykwc_
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
可以描述一下你的游戏吗。


  • _ykwc_
  • 超能力者
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我也是小白,也在尝试写一些简单的游戏。


  • Dina365
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
gamePass[i]=firstPass[i]是什么操作?把另一个二维数组第i行的首地址赋给这个二维数组第i行的首地址?如果要直接复制数组的值,应该直接用memcpy()函数


  • 才不是惠痴ₔ
  • 麻婆豆腐
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
可以一个个复制,有几维就要几个循环。也可以一个循环,毕竟目前数组是连续内训


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 15回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示