私は、戦闘機1のために印刷された戦艦の地図を作ろうとしています。これは私が作ったコードです。2d戦艦ゲームの印刷方法
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define W '~'
#define H '*'
#define M 'm'
#define C 'c'
#define B 'b'
#define R 'r'
#define S 's'
#define D 'd'
typedef int boolean;
enum {false,true};
typedef struct {
int aim;
char visuals;
}Space;
typedef struct{
int size;
int type;
}Ship;
Space player1Side[10][10];
Space player2Side[10][10];
Ship s, *nS;
int a, b;
char l;
void printBoard() {
for (int x = 0; x < 10; x++) {
printf(" | ");
for (int y = 0; y < 10; y++) {
if (player1Side[x][y].aim != 0) {
printf("%c", player1Side[x][y].visuals);
}
else {
switch (player1Side[x][y].visuals)
{
case H: printf("%c", H);
break;
case M: printf("%c", M);
break;
case C: printf("%c", C);
break;
case B: printf("%c", B);
break;
case R: printf("%c", R);
break;
case S: printf("%c", S);
break;
case D: printf("%c", D);
break;
case W:
default: printf("%c", W); break;
break;
}
}
printf(" | ");
}
printf(" | | ");
for (int y = 10; y > 0; y--) {
if (player2Side[x][y].aim != 0) {
printf("%c", player2Side[x][y].visuals);
}
else {
switch (player2Side[x][y].visuals)
{
case H: printf("%c", H);
break;
case M: printf("%c", M);
break;
default: printf("%c", W); break;
break;
}
}
printf(" | ");
}
printf("%d \n", x + 1);
}
printf(" | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |10 | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |10 |\n");
printf(" Player's board
Computer's board\n");
}
void placeShips() {
printf("Start placing the ships by specifying what orientation ('h' for horizontal and 'v' for vertical) ship you wish to place, then putting the coordinates of where you wish to place it. 'c' for aircraft Carrier, 'd' for Destroyer, 'r' for Cruser, 's' for Submarine, and 'b' for BATTLESHIP.\n");
int *x = &a;
int *y = &b;
int c = 0;
char *i = &l;
Ship *nS = &s;
boolean isVert;
while(c < 1) {
isVert = false;
scanf("%c %c", &i, &nS->type);
if (l == 'v') {
isVert = true;
}
switch (s.type)
{
case C:
s.size = 5;
break;
case B:
s.size = 4;
break;
case R:
s.size = 3;
break;
case S:
s.size = 3;
break;
case D:
s.size = 2;
break;
default:
break;
}
scanf("%d %d", &x, &y);
if (a - 1 >= 10 || b - 1 >= 10 || (a + s.size >= 10 && isVert!=true) || (a + s.size >= 10 && isVert == true)){
printf("That is out of bounds. please try again\n");
placeShips();
break;
}
else {
for (int i = s.size; i > 0; i--) {
if (isVert!= true) {
player1Side[a + i - 1][b].visuals = &nS->type;
}
else {
player1Side[a][b + i - 1].visuals = &nS->type;
}
}
}
c++;
}
}
void cpuPlaceShips() {
}
boolean checkWinner() {
return true;
}
main() {
for (int x = 0; x < 10;x++) {
for (int y = 0; y < 10;y++) {
player1Side[x][y].aim = 0;
player2Side[x][y].aim = 0;
player1Side[x][y].visuals = '~';
player2Side[x][y].visuals = '~';
}
}
printBoard();
placeShips();
printBoard();
system("pause");
}
私はそれを実行すると、入力された座標で船のシンボルを得ることを期待します。代わりに、私はこれを取得します。
これは本当に迷惑で、何時間も私を悩ませています。誰でも助けてくれますか?私は本当にそれを感謝します。あなたが次にいくつかのポインタの混乱があるtype
は、構造体のchar
なくint
typedef struct{
int size;
char type; // <== not int
} Ship;
であることを考慮すべきであると思われるコードを見てみると
コードをレンダリングする必要があると思われる方法の同様のマップを提供することをお勧めします。 – Alan
コードの重要な部分が欠落しています。 –
@RingØそれを教えてくれてありがとう。私はコードの重要な部分を追加するためにそれを編集しました。私はこれが私のコードで解決策を見つけるのに役立つことを願っています。 – JBoi