我写了一个简单的程序,要实现以下效果:
随机生成一个地形
然后我的程序就成这个样子了:
根据我的经验,我认为这是内存调用错误
可是我检查了一遍,好像数组的引用都没有超出设置的值啊
不知道各位能不能给我这个初学者解决一下问题呢
语言:C++
代码放上:
#include <cstdio>
#include <stdlib.h>
const char block=3;
char map[1024][64];
char screen[64][16];
int change[16]={-3,-2,-2,-1,-1,-1,0,0,0,0,1,1,1,2,2,3};
void init(){
int l,a;
l=rand();
l=l%65;
for(int i=l;i>=0;i++) map[0][i]=block;
for(int i=0;i<1024;i++){
a=rand();
a=a%16;
a=change[a];
l=l+a;
for(int j=l;j>=0;j--) map[i][j]=block;
}
for(int i=0;i<64;i++){
for(int j=0;j<16;j++) screen[i][j]=map[i][j];
}
return;
}
void show(){
for(int i=0;i<64;i++){
for(int j=0;j<16;j++) putchar(screen[i][j]);
}
return;
}
int main(){
init();
show();
return 0;
}
char map[1024][64];长度是64
l=l%65; 怎么是65, 应该改成 l=l%64;
for(int i=l;i>=0;i--) map[0][i]=block; 倒序循环要i-- 不是i++
你要输出什么效果,你screen数组中的字符值都是block
block是3,是字符ascii编码,属于不可显示的字符.
#include <cstdio>
#include <stdlib.h>
const char block = 3;
char map[1024][64];
char screen[64][16];
int change[16] = { -3,-2,-2,-1,-1,-1,0,0,0,0,1,1,1,2,2,3 };
void init() {
int l, a;
l = rand();
l = l % 64;//64
for (int i = l; i >= 0; i--) map[0][i] = block;//i--
for (int i = 0; i<1024; i++) {
a = rand();
a = a % 16;
a = change[a];
l = l + a;
for (int j = l; j >= 0; j--) map[i][j] = block;
}
for (int i = 0; i<64; i++) {
for (int j = 0; j<16; j++) screen[i][j] = map[i][j];
}
return;
}
void show() {
for (int i = 0; i<64; i++) {
for (int j = 0; j<16; j++) putchar(screen[i][j]);
}
return;
}
int main() {
init();
show();
return 0;
}
#include <cstdio>
#include <stdlib.h>
const char block=3;
char map[1024][64];
char screen[64][16];
int change[16]={-3,-2,-2,-1,-1,-1,0,0,0,0,1,1,1,2,2,3};
void init(){
int l,a;
l=rand();
l=l%64;
for(int i=l;i>=0;i--) map[0][i]=block;
for(int i=0;i<1024;i++){
a=rand();
a=a%16;
a=change[a];
l=l+a;
for(int j=l;j>=0;j--) map[i][j]=block;
}
for(int i=0;i<64;i++){
for(int j=0;j<16;j++) screen[i][j]=map[i][j];
}
return;
}
void show(){
for(int i=0;i<64;i++){
for(int j=0;j<16;j++) putchar(screen[i][j]);
}
return;
}
int main(){
init();
show();
return 0;
}