試行錯誤しつつ2,3時間粘ってみたのですが全くわかりませんでした・・・。
コンパイラーはVisual Studio2008で OSはwindows7です。
■■■■■
■@ag■
■bcd■
■■■■■
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
//グローバル変数にしてください。
HANDLE hCout;//コンソールのハンドル
CONSOLE_SCREEN_BUFFER_INFO csbi; // コンソール画面の情報
/*構造体定義*/
typedef struct
{
char type;/*種類*/
int atari;/*当りフラグ*/
}KEY;
typedef struct{
char jiki_img;//主人公描写
int jiki_x;//主人公のX座標
int jiki_y;//主人公のY座標
int jiki_stop;//主人公止まる
int jiki_moves;//主人公動く
int atari;//当たり判定
}PLAYER;//主人公
PLAYER jiki_ch;
//マップデータ
#define MAXWIDTH 17
#define MAXHEIGHT 11
int g_mapdata[MAXHEIGHT][MAXWIDTH] = {
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, //0
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, //1
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, //2
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, //3
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, //4
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, //5
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, //6
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, //7
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, //8
{ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0}, //9
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} //10
};
KEY dt[MAXHEIGHT][MAXWIDTH];
//プロトタイプ宣言
void shuffle(KEY *);//現在使ってない 一応シャッフル
void init(KEY *);//初期化関数
void mapdeta(void);//マップ作成関数
void jiki_main(PLAYER *);//主人公表示関数
void keybord(PLAYER *);//キーボード入力・移動関数
/****************************/
//メイン関数
/****************************/
void main(void)
{
// ここからはmainの先頭に。
hCout = GetStdHandle(STD_OUTPUT_HANDLE); // 標準出力のハンドルを取得する。
GetConsoleScreenBufferInfo(hCout, &csbi); // 画面の情報を取得する
srand((unsigned int)time(NULL));
system("cls");
jiki_ch.jiki_img='@';//主人公
int i;//for用変数宣言
jiki_main(&jiki_ch);//主人公の位置決定表示関数
mapdeta();
keybord(&jiki_ch);
}
/*while(1){
int test;
scanf("%d",&test);
//clrscr();
switch(test)
{
case 1:
gotoxy(1,1);
mapdeta();
break;
case 2:
printf("2です。\n");
break;
default:
printf("エラーです。\n");
break;
}*/
void init(KEY *pt){
char c[1][26]={'a','b','c','d',
'e','f','g','h',
'i','j','k','l',
'm','n','o','p',
'q','r','s','t',
'u','v','w','x',
'y','z'};/*種類*/
/*c[26]={'A','B','C','D',
'E','F','G','H',
'I','J','K','L',
'M','N','O','P',
'Q','R','S','T',
'U','V','W','X',
'Y','Z'};/*種類*/
int i,j;
for(i=0;i<MAXHEIGHT;++i){
for(j=0;j<MAXWIDTH;j++){
pt->type=c[0][rand()%26];
pt++;
}
}
}
void jiki_main(PLAYER *pt){//主人公表示関数
g_mapdata[pt->jiki_x=rand()%9+1][pt->jiki_y=rand()%15+1]=2;
}
void shuffle(KEY *pt)
{
KEY wk;/*入れ替え用のワークエリア*/
int i,rnd;/*要素番号用、乱数用*/
i=26;
while(i>1)
{
rnd=rand()%i;/*乱数セット*/
wk=*(pt+rnd);
*(pt+rnd)=*(pt+i-1);
*(pt+i-1)=wk;
i--;
}
}
void mapdeta(void){
int i,j;
for(i=0;i<MAXHEIGHT;i++)
{
for(j=0;j<MAXWIDTH;j++)
{
switch(g_mapdata[i][j])
{
case 0:
printf("■");
break;
case 1:
init(&dt[0][0]);
shuffle(&dt[0][0]);
printf("%c ",dt[i][j].type);
break;
case 2:
// textcolor(4);
printf("%c ",jiki_ch.jiki_img); //printf("@ ");
// textcolor(7);
break;
default:
printf("XXX");
break;
}
}
printf("\n");
}
}
void keybord(PLAYER *pt){
char key;//文字保存変数
int map;
//for専用変数
int i;
/*for(i=0;i<(MAXHEIGHT*MAXWIDTH);i++){
map=dt[i].type;
}*/
while(1){
key = getchar();//キーボードから一文字入力
if(g_mapdata[pt->jiki_x-1][pt->jiki_y-1]==key){
pt->jiki_x-=1;
pt->jiki_y-=1;
}
}
}