プログラミング初心者です。
一回は自分でプログラムを書いてみようと思い自分の知識だけで五目並べをC言語で作っていました。
そこで、よくわからないエラーが出てしまったのですが、どうも解決できずにここに来た次第です。
これがソースです↓↓
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define BOARDSIZE 10
#define EMPTY 0
#define BLACK 1
#define WHITE 2
int board[BOARDSIZE][BOARDSIZE];
char piece[] = {'-','X','O'};
int stop,count = 1;
void setBoard();
void showBoard();
void inputKey();
void putPiece();
void checkPiece();
int main ()
{
printf("黒の番です\n");
setBoard();
showBoard();
while(1){
inputKey();
showBoard();
stop++;
if(stop == 102){printf("error\n");break;}
}
return 0;
}
void setBoard ()
{
int i,j;
if(count == 1){
for(i = 0;i < BOARDSIZE;i++){
for(j = 0;j < BOARDSIZE;j++){
board[j] = EMPTY;
}
}
}
}
void putPiece(int y,int x)
{
int check;
check = count % 2; //偶数か奇数か判定
if(y == 0 && x == 0){printf("終了します。\n");getch();exit(0);}
if(board[y][x]==EMPTY){
count++;
if(check == 0){
printf("白の番です\n");//奇数
board[y][x] = BLACK;
}else{
printf("黒の番です\n");//偶数
board[y][x] = WHITE;
}
}else{
printf("そこには置けません\n");
inputKey();
}
checkPiece(y,x);
}
void showBoard() //盤面を表示
{
int y,x;
printf(" 1 2 3 4 5 6 7 8 910\n");
for(y=1;y<BOARDSIZE+1;y++){
printf("%2d",y);
for(x=0;x<BOARDSIZE;x++){
printf(" %c",piece[board[y][x]]);
}
printf("\n");
}
}
void inputKey()
{
int y,x;
printf(">");
scanf("%d %d",&y,&x);
putPiece(y,x);
}
void checkPiece(int y,int x)
{
printf("%d %d",y,x);
}
checkPieceを作っていたときにできたことなのでcheckPiece関数はまだ作り途中です。
そこで、このエラーの解消方法と五目並べの五連の判定の方法も教えてくれれば助かります。
余談なのですが、僕はいろいろな言語に挑戦してみているのですがひとつの言語を完璧にしてから次のほかの言語へ挑戦したほうが良いのでしょうか?それともいろいろな言語を触れてもいいのでしょうか。
いろいろな言語を触れる中で言語がごちゃごちゃにならないものなのでしょうか。
本題とはなれて長々と質問して申し訳ありません。回答お願いします。
'checkPiece' : 関数に2個の引数は指定できません。
Re: 'checkPiece' : 関数に2個の引数は指定できません。
コードを提示するはBBCodeを有効にした(無効にしない)状態でcodeタグで囲んでいただけると、見やすくてありがたいです。
また、引数の型を省略した「関数がある」というだけの宣言ではなく、きちんとプロトタイプ宣言を書くのもいいと思います。
とりあえずこのエラーの解消方法は、C言語で作ったのできちんとC++ではなくC言語としてコンパイルすることです。snake さんが書きました:一回は自分でプログラムを書いてみようと思い自分の知識だけで五目並べをC言語で作っていました。
(略)
そこで、このエラーの解消方法と五目並べの五連の判定の方法も教えてくれれば助かります。
また、引数の型を省略した「関数がある」というだけの宣言ではなく、きちんとプロトタイプ宣言を書くのもいいと思います。
言語を完璧にすることはできないと思うので、挑戦するのはいいことだと思います。snake さんが書きました:余談なのですが、僕はいろいろな言語に挑戦してみているのですがひとつの言語を完璧にしてから次のほかの言語へ挑戦したほうが良いのでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 'checkPiece' : 関数に2個の引数は指定できません。
禁じ手は一旦無視して、5個並んでいるかの判定はこんな感じでできるはずです。(テストはしていません)
/* 最初に見つかった5個並んでいる石を返す。5個並んでいなかったらEMPTYを返す。 */
int getKati(void)
{
static const int d[4][2] = {{0, 1}, {1, 0}, {1, 1}, {1, -1}}; /* 右、下、右下、左下 */
int i,j,k,l;
for(i = 0;i < BOARDSIZE;i++){ /* それぞれの縦位置について調べる */
for(j = 0;j < BOARDSIZE;j++){ /* それぞれの横位置について調べる */
if(board[i][j] != EMPTY){ /* ここから5個つながってるかもしれない */
for(k = 0;k < 4;k++){ /* 各向きを調べる */
for(l = 1;l < 5;l++){ /* 5個つながってるか調べる */
/* 移動した位置 */
int ii = i + d[k][0] * l;
int jj = j + d[k][1] * l;
/* 移動した位置が場外か、最初と同じ石が置かれていない場所なら5個つながってない */
if(ii < 0 || ii >= BOARDSIZE || jj < 0 || jj >= BOARDSIZE || board[ii][jj] != board[i][j]){
break;
}
}
if(l >= 5){
/* 5個つながっていたら、その石を返す */
return board[i][j];
}
}
}
}
}
/* 決着がついていない、または引き分け */
return EMPTY;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 'checkPiece' : 関数に2個の引数は指定できません。
オフトピック
このトピックは二重投稿されています。(向こうにもレスがついていたので誘導)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)