説明したように、char
はint
互換タイプです。
あなたの説明から、最初に値がcharであるint
の配列で開始するかもしれません。そして、ゲームが進行するにつれて、char値はもはや関連しなくなり、int値になります。はい?
IMHO問題は、intにcharを入れていないということです。それは動作し、言語に組み込まれています。
IMHOは、同じ種類のスペースを使用していずれかのタイプを格納できるようにするのに役立ちますが、重要ではありません。驚くほど小型のマイクロコントローラを使用している場合を除き、スペースの節約は重要ではありません。
ボードを書きやすいようにしたいのはなぜか分かりますが、それはゲーム作成のごく一部であると思います。残りのゲームでは単純にコードの最初の数行に焦点を当てるよりも。
プログラムについて考えてみましょう。ボードの印刷方法を検討してください。
for (int i=0; i<states; ++i) {
printf("%c ", game_state[i]);
}
ゲームが進むにつれてその後、これらの値のいくつかはint
次のようになります。それができる開始時
。
「セルの値を印刷するにはどのフォーマットが必要ですか?」という問題があります。 %c形式は1つの文字を出力します。 int
の値が通常の印刷文字とは異なって印刷されていると思われますか?たとえば、int
の値を整数、つまり10進数(または16進数)の文字列にしたいとしますか?これには '%d'形式が必要です。私のMac上で
私はこれでした:
#include <stdio.h>
#define MAX_STATE (90)
int main (int argc, const char * argv[]) {
int game_state[MAX_STATE];
int state;
int states;
for (states=0; states<MAX_STATE; ++states) {
game_state[states] = states+256+32;
}
for (int i=0; i<states; ++i) {
printf("%c ", game_state[i]);
}
return 0;
}
を表現states+256+32
は出力文字コードはASCIIでない、あるいはISO-8859-1、彼らはコードをコントロールしていない保証します。それらは単なる整数です。出力は次のとおりです。
! " # $ % & ' () * + , - ./0 1 2 3 4 5 6 7 8 9 : ; <=> ? @ 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 [ \ ]^_ ` 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
私は値が初期文字(%cの形式)であるときに、印刷される元の文字(無データ変換)をたいと思いますが、あなたは、データ変換を見たいです、 2進数から数字の文字列(%dまたは相対形式)に変換します。はい?
どのようにプログラムがどのようなものかを伝えますか?
int
の値が(プログラムのように)文字でないことを確認できます。通常、これは苦痛になります。なぜなら、値が制限されていて、その1つの仕事をより簡単にするために面白い表現を使用するからです。
私は「値がまだchar
ある」と言うフラグを使用する方が簡単だと思いますか
「の値がint
である」労働組合を使用してから、スペースの小さな節約がしばらくまれ価値がある、と初期状態と現在の移動が利用可能であることに利点があります。
だから私はあなたのようなもので終わると思う:移動が任意の便利な値にすることができ
#include <stdio.h>
#define MAX_STATE (90)
int main (int argc, const char * argv[]) {
struct GAME { int cell_state; int move; char start_value } game_state[MAX_STATE];
enum CELL_STATE_ENUM { start_cell, move_cell };
int state;
int states;
for (states=0; (state=getchar())!= EOF && states<MAX_STATE; ++states) {
game_state[states].start_value = state;
game_state[states].cell_state = start_cell;
}
// should be some error checking ...
// ... make some moves ... this is nonsense but shows an idea
for (int i=0; i<states; ++i) {
if (can_make_move(i)) {
game_state[states].cell_state = move_cell;
game_state[states].move = new_move(i);
}
}
// print the board
for (int i=0; i<states; ++i) {
if (game_state[i].cell_state == start_cell) {
printf("'%c' ", game_state[i].start_value);
} else if (game_state[i].cell_state == move_cell) {
printf("%d ", game_state[i].move);
} else {
fprintf(stderr, "Error, the state of the cell is broken ...\n");
}
}
return 0;
}
、プログラムの残りの部分を複雑にするものは何もありません。
'char'は単に' int'よりも小さい数である。ここで一例です。 charをintに自由にキャストできます。 –
charが初期状態を表し、intが後の状態を表す場合、char-vs-intに頼るのではなく、状態をよりよくエンコードするクラスまたは構造体にするのはなぜですか?あなたが何かをすることができるからといって、あなたが意味するものではありません。 –