構造体と同じようにteki[]と変更しても
二項演算子 '[' : 'TEKI' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません
と表示されてしまいます。
表示は戦闘画面部分にあります
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
typedef struct{
char name[10];
int life;
int MP;
int att;
int defe;
}TEKI;
typedef struct{
char *iname;
short X;
short Y;
}ITEM;
typedef struct{
char *mp;
short x;
short y;
}MAP;
int main(void)
{
TEKI date[20]={
{"ソリッド ",100,100, 90, 80},
{"リキッド ",100,100, 70, 80},
{"ソリダス ",100,100, 80, 80},
{"レイヴン ", 80,100,100, 30},
{"ミラー ",100,100, 50, 50},
{"メリル ", 70, 40, 60, 60},
{"オセロット ",100,100, 50, 50},
{"ジョニー ", 80, 30, 60, 30},
{"ピューパ ", 80, 0, 80, 70},
{"ヴァンプ ", 80, 0, 80, 40},
{"オタコン ", 85,100, 45, 80},
{"ゼロ ",100,100, 80, 40},
{"シギント ",100,100, 30, 80},
{"パラメディック",100,100, 60, 60},
{"ソロー ",100,100, 70, 70},
{"ペイン ",100,100, 70, 60},
{"フィアー ",100,100, 70, 80},
{"オクトパス ",100, 0, 50, 90},
{"マンティス ",100, 80, 70, 70},
{"ビッグ.ボス",100,100, 90, 90},
},*OFF,*DEF,MC[2],teki;
ITEM item[]={
{"名前 ",16,5},
{"LIFE ",16,7},
{"MP ",16,9},
{"攻撃力",16,11},
{"防御力",16,13},
};
MAP map[4]={
{"+―――――――――――――――――――――――+",14,4},
{"| |",14,5},
{"+―――――――――――――――――――――――+",14,14},
};
HANDLE hStdout;
COORD pos;
FILE *fp_txt,*fp_bin;
int i,n,damage,rnd,wk,sen,kou,rand_hai[20];
int no,btl;
int ban=1;
int flg=0;
srand((unsigned)time(NULL));
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
/*-------書き込み-------*/
//テキスト
fp_txt=fopen("monster.txt","w");
if(fp_txt==NULL){return -1;}
for(i=0;i<20;i++){ fprintf(fp_txt,"%s %3d %3d %3d %3d\n",date[i].name,date[i].life,date[i].MP,date[i].att,date[i].defe); }
//バイナリ
fp_bin=fopen("monster.bin","wb");
if(fp_bin==NULL){return -1;}
fwrite(&date,sizeof(date),1,fp_bin);
fclose(fp_txt);
fclose(fp_bin);
/*----------------------*/
fp_bin=fopen("monster.bin","rb");
if(fp_bin==NULL){ return -1; }
fread(&teki,sizeof(TEKI),1,fp_bin);
/*--------乱数発生------*/
for(i=0;i<20;i++) rand_hai[i]=i;
for(i=20;i>1;i--){
rnd=rand()%i;
wk=rand_hai[i-1];
rand_hai[i-1]=rand_hai[rnd];
rand_hai[rnd]=wk;
}
sen=rand_hai[0];
kou=rand_hai[1];
MC[0]=date[sen];
MC[1]=date[kou];
/*----------------------*/
do{
system("cls");
/*-------戦闘画面-------*/
SetConsoleTextAttribute(hStdout,BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE);
pos.X=14;
pos.Y=3;
SetConsoleCursorPosition(hStdout, pos);
printf("戦闘データ");
SetConsoleTextAttribute(hStdout,FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
pos.X=map[0].x;
pos.Y=map[0].y;
SetConsoleCursorPosition(hStdout, pos);
printf("%s",map[0].mp);
pos.Y=map[1].y;
for(i=0;i<9;i++){
SetConsoleCursorPosition(hStdout, pos);
printf("%s",map[1].mp);
pos.Y++;
}
pos.Y=map[2].y;
SetConsoleCursorPosition(hStdout, pos);
printf("%s",map[2].mp);
/*----------------------*/
ban^=0x00000001;
OFF=&MC[ban];
DEF=&MC[ban^0x00000001];
pos.X=50;
pos.Y=5;
SetConsoleCursorPosition(hStdout, pos);
printf("[%s]",teki.name);
pos.X=16;
pos.Y=13;
SetConsoleCursorPosition(hStdout, pos);
printf("[%s]",teki.name);
if(flg==1 || flg==2) break;
//コマンド
pos.X=16;
pos.Y=15;
SetConsoleCursorPosition(hStdout, pos);
printf("1:戦闘体制 2:敵前逃亡");
pos.Y=16;
SetConsoleCursorPosition(hStdout, pos);
printf("(1,2)番号入力=>");
scanf("%d",&no);
//戦う
if(no==1){
pos.Y=15;
SetConsoleCursorPosition(hStdout, pos);
printf("1:体当たり 2:自爆 3:奥義・石破天驚拳");
pos.Y=16;
SetConsoleCursorPosition(hStdout, pos);
printf("(1,2,3)番号入力=>");
scanf("%d",&btl);
SetConsoleTextAttribute(hStdout,FOREGROUND_RED|FOREGROUND_GREEN);
if(btl==1){
pos.Y=17;
SetConsoleCursorPosition(hStdout, pos);
damage=rand()%(OFF->att+10);
DEF->life -= damage;
if(damage==0) printf("ノーダメージ\n");
printf("【%sに%dのダメージ!!!】\n",DEF->name,damage);
}
//自爆
if(btl==2){
pos.Y=17;
SetConsoleCursorPosition(hStdout, pos);
DEF->life = 0;
OFF->life = 0;
printf("自爆した\n");
flg=2;
}
//奥義
if(btl==3){
i=rand()%2;
if(i==0){
pos.Y=17;
SetConsoleCursorPosition(hStdout, pos);
OFF->life= OFF->life/2; printf("自分のLIFEが半分になってしまった\n");
}
if(i==1){
pos.Y=17;
SetConsoleCursorPosition(hStdout, pos);
DEF->life= DEF->life/2; printf("%sのLIFEが半分になった\n",DEF->name);
}
}
}
//敵前逃亡
if(no==2){
pos.Y=17;
SetConsoleCursorPosition(hStdout, pos);
printf("【%sは敵前逃亡した】\n",OFF->name); flg=1; break;
}
if(DEF->life < 0){ DEF->life=0; flg=1;}
_getch();
}while(DEF->life >= 0);
pos.Y=17;
SetConsoleCursorPosition(hStdout, pos);
SetConsoleTextAttribute(hStdout,BACKGROUND_RED|BACKGROUND_BLUE);
if(flg==0) printf("【 %sの勝利 】\n",OFF->name);
else if(flg==1) printf("【 %sの勝利 】\n",DEF->name);
else if(flg==2) printf("【 両者戦闘不能 】\n");
SetConsoleTextAttribute(hStdout,FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE); // 文字色を復帰
pos.X=0;
pos.Y=24;
SetConsoleCursorPosition(hStdout, pos);
fclose(fp_txt);
fclose(fp_bin);
return 0;
}