指し手の入力関数を作成して、整理しました。


ソース:stime_16021902


int sasite_nyuuryoku(); //指し手の入力関数

/* 先手の指し手の入力関数 */
int sente_nyuuryoku()
{
/* 先手の指し手の移動元(列)の入力 */
printf("\n先手の指し手の移動元(列)を入力してください:");

s_te_m_r = sasite_nyuuryoku(); //指し手を取得

/* 先手の指し手の移動元(行)の入力 */
printf("\n先手の指し手の移動元(行)を入力してください:");

s_te_m_g = sasite_nyuuryoku(); //指し手を取得

/* 先手の指し手の移動先(列)の入力 */
printf("\n先手の指し手の移動先(列)を入力してください:");

s_te_s_r = sasite_nyuuryoku(); //指し手を取得

/* 先手の指し手の移動先(行)の入力 */
printf("\n先手の指し手の移動先(行)を入力してください:");

s_te_s_g = sasite_nyuuryoku(); //指し手を取得

/* 先手の移動元か移動先が後手陣地の場合 */
if (s_te_m_g == '1' || s_te_m_g == '2' || s_te_m_g == '3' || s_te_s_g == '1' || s_te_s_g == '2' || s_te_s_g == '3') {
printf("\n成りますか?(Yes:1, No:0):"); //成るか確認

while (1){
s_te_n = getchar();
if (s_te_n != '\n') //エンター以外が入力されたら
break; //whileループを抜ける
}
}
else {
s_te_n = 0;
}

return 0;
}

/* 後手の指し手の入力関数 */
int gote_nyuuryoku()
{
/* 後手の指し手の移動元(列)の入力 */
printf("\n後手の指し手の移動元(列)を入力してください:");

g_te_m_r = sasite_nyuuryoku(); //指し手を取得

/* 後手の指し手の移動元(行)の入力 */
printf("\n後手の指し手の移動元(行)を入力してください:");

g_te_m_g = sasite_nyuuryoku(); //指し手を取得

/* 後手の指し手の移動先(列)の入力 */
printf("\n後手の指し手の移動先(列)を入力してください:");

g_te_s_r = sasite_nyuuryoku(); //指し手を取得

/* 後手の指し手の移動先(行)の入力 */
printf("\n後手の指し手の移動先(行)を入力してください:");

g_te_s_g = sasite_nyuuryoku(); //指し手を取得

/* 後手の移動元か移動先が先手陣地の場合 */
if (g_te_m_g == '7' || g_te_m_g == '8' || g_te_m_g == '9' || g_te_s_g == '7' || g_te_s_g == '8' || g_te_s_g == '9') {
printf("\n成りますか?(Yes:1, No:0):"); //成るか確認

while (1){
g_te_n = getchar();
if (g_te_n != '\n') //エンター以外が入力されたら
break; //whileループを抜ける
}
}
else {
g_te_n = 0;
}

return 0;
}

/* 指し手の入力関数 */
int sasite_nyuuryoku()
{
int sasite; //指し手を一時保管

while (1){
sasite = getchar();
if (sasite != '\n') //エンター以外が入力されたら
break; //whileループを抜ける
}

return sasite;
}

将時画面16021902


盤面情報を記憶する盤面配列を用意しました。


ソース:stime_16021901


/* 盤面の初期設定 */
char *banmen[9][9] = { { KYO, KEI,GIN,KIN,OU,KIN,GIN,KEI,KYO },
{ KUHAKU, HI, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KAKU, KUHAKU },
{ FU, FU, FU, FU, FU, FU, FU, FU, FU },
{ KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU },
{ KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU },
{ KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU },
{ FU, FU, FU, FU, FU, FU, FU, FU, FU },
{ KUHAKU, HI, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KAKU, KUHAKU },
{ KYO, KEI, GIN, KIN, GYOKU, KIN, GIN, KEI, KYO } };

/* 盤面表示関数 */
int banmen_hyouji()
{
printf("\n");
printf(" 9 8 7 6 5 4 3 2 1 \n");
printf("┌─┬─┬─┬─┬─┬─┬─┬─┬─┐\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│一\n", banmen[0][0], banmen[0][1], banmen[0][2], banmen[0][3], banmen[0][4], banmen[0][5], banmen[0][6], banmen[0][7], banmen[0][8]);
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│二\n", banmen[1][0], banmen[1][1], banmen[1][2], banmen[1][3], banmen[1][4], banmen[1][5], banmen[1][6], banmen[1][7], banmen[1][8]);
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│三\n", banmen[2][0], banmen[2][1], banmen[2][2], banmen[2][3], banmen[2][4], banmen[2][5], banmen[2][6], banmen[2][7], banmen[2][8]);
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│四\n", banmen[3][0], banmen[3][1], banmen[3][2], banmen[3][3], banmen[3][4], banmen[3][5], banmen[3][6], banmen[3][7], banmen[3][8]);
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│五\n", banmen[4][0], banmen[4][1], banmen[4][2], banmen[4][3], banmen[4][4], banmen[4][5], banmen[4][6], banmen[4][7], banmen[4][8]);
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│六\n", banmen[5][0], banmen[5][1], banmen[5][2], banmen[5][3], banmen[5][4], banmen[5][5], banmen[5][6], banmen[5][7], banmen[5][8]);
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│七\n", banmen[6][0], banmen[6][1], banmen[6][2], banmen[6][3], banmen[6][4], banmen[6][5], banmen[6][6], banmen[6][7], banmen[6][8]);
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│八\n", banmen[7][0], banmen[7][1], banmen[7][2], banmen[7][3], banmen[7][4], banmen[7][5], banmen[7][6], banmen[7][7], banmen[7][8]);
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│九\n", banmen[8][0], banmen[8][1], banmen[8][2], banmen[8][3], banmen[8][4], banmen[8][5], banmen[8][6], banmen[8][7], banmen[8][8]);
printf("└─┴─┴─┴─┴─┴─┴─┴─┴─┘\n");

return 0;
}


将時画面16021901


defineを利用して、盤面表示関数を書き換えました。


ソース:stime_16021802


#define FU "歩" //FUを歩と定義
#define KYO "香" //KYOを香と定義
#define KEI "桂" //KEIを桂と定義
#define GIN "銀" //GINを銀と定義
#define KIN "金" //KINを金と定義
#define KAKU "角" //KAKUを角と定義
#define HI "飛" //HIを飛と定義
#define OU "王" //OUを王と定義
#define GYOKU "玉" //GYOKUを玉と定義
#define KUHAKU " " //KUHAKUを" "と定義

/* 盤面表示関数 */
int banmen_hyouji()
{
printf("\n");
printf(" 9 8 7 6 5 4 3 2 1 \n");
printf("┌─┬─┬─┬─┬─┬─┬─┬─┬─┐\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│一\n",KYO,KEI,GIN,KIN,OU,KIN,GIN,KEI,KYO);
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│二\n",KUHAKU,HI,KUHAKU,KUHAKU,KUHAKU,KUHAKU,KUHAKU,KAKU,KUHAKU);
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│三\n", FU, FU, FU, FU, FU, FU, FU, FU, FU);
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│四\n", KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU);
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│五\n", KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU);
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│六\n", KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU);
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│七\n", FU, FU, FU, FU, FU, FU, FU, FU, FU);
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│八\n", KUHAKU, HI, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KUHAKU, KAKU, KUHAKU);
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│%s│%s│%s│%s│%s│%s│%s│%s│%s│九\n", KYO, KEI, GIN, KIN, GYOKU, KIN, GIN, KEI, KYO);
printf("└─┴─┴─┴─┴─┴─┴─┴─┴─┘\n");

return 0;
}


将時画面16021802


処理を関数で分割と成りの判定のバグを修正しました。


ソース:stime_16021801


/* stime.c */

#include <stdio.h>

int s_te_m_r; //先手の指し手の移動元(列)
int s_te_m_g; //先手の指し手の移動元(行)
int s_te_s_r; //先手の指し手の移動先(列)
int s_te_s_g; //先手の指し手の移動先(行)
int s_te_n; //先手の成りフラグ

int g_te_m_r; //後手の指し手の移動元(列)
int g_te_m_g; //後手の指し手の移動元(行)
int g_te_s_r; //後手の指し手の移動先(列)
int g_te_s_g; //後手の指し手の移動先(行)
int g_te_n; //後手の成りフラグ

int banmen_hyouji(); //盤面表示関数
int sente_nyuuryoku(); //先手の指し手の入力関数
int gote_nyuuryoku(); //後手の指し手の入力関数
int sasite_hyouji(); //指し手表示関数

int main()
{
while (1){
banmen_hyouji(); //盤面表示関数
sente_nyuuryoku(); //先手の指し手の入力関数
gote_nyuuryoku(); //後手の指し手の入力関数
sasite_hyouji(); //指し手表示関数
}
return 0;
}

/* 盤面表示の関数 */
int banmen_hyouji()
{
printf("\n");
printf(" 9 8 7 6 5 4 3 2 1 \n");
printf("┌─┬─┬─┬─┬─┬─┬─┬─┬─┐\n");
printf("│香│桂│銀│金│王│金│銀│桂│香│一\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │飛│ │ │ │ │ │角│ │二\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│歩│歩│歩│歩│歩│歩│歩│歩│歩│三\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │ │ │ │ │ │ │ │ │四\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │ │ │ │ │ │ │ │ │五\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │ │ │ │ │ │ │ │ │六\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│歩│歩│歩│歩│歩│歩│歩│歩│歩│七\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │角│ │ │ │ │ │飛│ │八\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│香│桂│銀│金│玉│金│銀│桂│香│九\n");
printf("└─┴─┴─┴─┴─┴─┴─┴─┴─┘\n");

return 0;
}

/* 先手の指し手の入力関数 */
int sente_nyuuryoku()
{
/* 先手の指し手の移動元(列)の入力 */
printf("\n先手の指し手の移動元(列)を入力してください:");

while (1){
s_te_m_r = getchar();
if (s_te_m_r != '\n') //エンター以外が入力されたら
break; //whileループを抜ける
}

/* 先手の指し手の移動元(行)の入力 */
printf("\n先手の指し手の移動元(行)を入力してください:");

while (1){
s_te_m_g = getchar();
if (s_te_m_g != '\n') //エンター以外が入力されたら
break; //whileループを抜ける
}

/* 先手の指し手の移動先(列)の入力 */
printf("\n先手の指し手の移動先(列)を入力してください:");

while (1){
s_te_s_r = getchar();
if (s_te_s_r != '\n') //エンター以外が入力されたら
break; //whileループを抜ける
}

/* 先手の指し手の移動先(行)の入力 */
printf("\n先手の指し手の移動先(行)を入力してください:");

while (1){
s_te_s_g = getchar();
if (s_te_s_g != '\n') //エンター以外が入力されたら
break; //whileループを抜ける
}

/* 先手の移動元か移動先が後手陣地の場合 */
if (s_te_m_g == '1' || s_te_m_g == '2' || s_te_m_g == '3' || s_te_s_g == '1' || s_te_s_g == '2' || s_te_s_g == '3') {
printf("\n成りますか?(Yes:1, No:0):"); //成るか確認

while (1){
s_te_n = getchar();
if (s_te_n != '\n') //エンター以外が入力されたら
break; //whileループを抜ける
}
}
else {
s_te_n = 0;
}

return 0;
}

/* 後手の指し手の入力関数 */
int gote_nyuuryoku()
{
/* 後手の指し手の移動元(列)の入力 */
printf("\n後手の指し手の移動元(列)を入力してください:");

while (1){
g_te_m_r = getchar();
if (g_te_m_r != '\n') //エンター以外が入力されたら
break; //whileループを抜ける
}

/* 後手の指し手の移動元(行)の入力 */
printf("\n後手の指し手の移動元(行)を入力してください:");

while (1){
g_te_m_g = getchar();
if (g_te_m_g != '\n') //エンター以外が入力されたら
break; //whileループを抜ける
}

/* 後手の指し手の移動先(列)の入力 */
printf("\n後手の指し手の移動先(列)を入力してください:");

while (1){
g_te_s_r = getchar();
if (g_te_s_r != '\n') //エンター以外が入力されたら
break; //whileループを抜ける
}

/* 後手の指し手の移動先(行)の入力 */
printf("\n後手の指し手の移動先(行)を入力してください:");

while (1){
g_te_s_g = getchar();
if (g_te_s_g != '\n') //エンター以外が入力されたら
break; //whileループを抜ける
}

/* 後手の移動元か移動先が先手陣地の場合 */
if (g_te_m_g == '7' || g_te_m_g == '8' || g_te_m_g == '9' || g_te_s_g == '7' || g_te_s_g == '8' || g_te_s_g == '9') {
printf("\n成りますか?(Yes:1, No:0):"); //成るか確認

while (1){
g_te_n = getchar();
if (g_te_n != '\n') //エンター以外が入力されたら
break; //whileループを抜ける
}
}
else {
g_te_n = 0;
}

return 0;
}

/* 指し手表示関数 */
int sasite_hyouji()
{
printf("\n先手:%c%c→%c%c", s_te_m_r, s_te_m_g, s_te_s_r, s_te_s_g);
/* 先手が成るか */
if (s_te_n == '1'){
printf("成り");
}
else {
printf("成らず");
}

printf("\n後手:%c%c→%c%c", g_te_m_r, g_te_m_g, g_te_s_r, g_te_s_g);
/* 後手が成るか */
if (g_te_n == '1'){
printf("成り");
}
else {
printf("成らず");
}

printf("\n");

return 0;
}


将時画面16021801


指し手の入力を繰り返し、盤面を再表示するようにしました。


ソース:stime_16021704


/* stime.c */

#include <stdio.h>

int main()
{

int s_te_m_r; //先手の指し手の移動元(列)
int s_te_m_g; //先手の指し手の移動元(行)
int s_te_s_r; //先手の指し手の移動先(列)
int s_te_s_g; //先手の指し手の移動先(行)
int s_te_n; //先手の成りフラグ

int g_te_m_r; //後手の指し手の移動元(列)
int g_te_m_g; //後手の指し手の移動元(行)
int g_te_s_r; //後手の指し手の移動先(列)
int g_te_s_g; //後手の指し手の移動先(行)
int g_te_n; //後手の成りフラグ

while (1){

printf("\n");
printf("\n");
printf(" 9 8 7 6 5 4 3 2 1 \n");
printf("┌─┬─┬─┬─┬─┬─┬─┬─┬─┐\n");
printf("│香│桂│銀│金│王│金│銀│桂│香│一\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │飛│ │ │ │ │ │角│ │二\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│歩│歩│歩│歩│歩│歩│歩│歩│歩│三\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │ │ │ │ │ │ │ │ │四\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │ │ │ │ │ │ │ │ │五\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │ │ │ │ │ │ │ │ │六\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│歩│歩│歩│歩│歩│歩│歩│歩│歩│七\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │角│ │ │ │ │ │飛│ │八\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│香│桂│銀│金│玉│金│銀│桂│香│九\n");
printf("└─┴─┴─┴─┴─┴─┴─┴─┴─┘\n");

/* 先手の指し手の移動元(列)の入力 */
printf("\n先手の指し手の移動元(列)を入力してください:");

while (1){
s_te_m_r = getchar();
if (s_te_m_r != '\n') // エンター以外が入力されたら
break; // whileループを抜ける
}

/* 先手の指し手の移動元(行)の入力 */
printf("\n先手の指し手の移動元(行)を入力してください:");

while (1){
s_te_m_g = getchar();
if (s_te_m_g != '\n') // エンター以外が入力されたら
break; // whileループを抜ける
}

/* 先手の指し手の移動先(列)の入力 */
printf("\n先手の指し手の移動先(列)を入力してください:");

while (1){
s_te_s_r = getchar();
if (s_te_s_r != '\n') // エンター以外が入力されたら
break; // whileループを抜ける
}

/* 先手の指し手の移動先(行)の入力 */
printf("\n先手の指し手の移動先(行)を入力してください:");

while (1){
s_te_s_g = getchar();
if (s_te_s_g != '\n') // エンター以外が入力されたら
break; // whileループを抜ける
}

/* 先手の移動元か移動先が後手陣地の場合 */
if (s_te_m_g < 4 || s_te_s_g < 4) {
printf("\n成りますか?(Yes:1, No:0):"); //成るか確認

while (1){
s_te_n = getchar();
if (s_te_n != '\n') // エンター以外が入力されたら
break; // whileループを抜ける
}
}
else {
s_te_n = 0;
}

/* 後手の指し手の移動元(列)の入力 */
printf("\n後手の指し手の移動元(列)を入力してください:");

while (1){
g_te_m_r = getchar();
if (g_te_m_r != '\n') // エンター以外が入力されたら
break; // whileループを抜ける
}

/* 後手の指し手の移動元(行)の入力 */
printf("\n後手の指し手の移動元(行)を入力してください:");

while (1){
g_te_m_g = getchar();
if (g_te_m_g != '\n') // エンター以外が入力されたら
break; // whileループを抜ける
}

/* 後手の指し手の移動先(列)の入力 */
printf("\n後手の指し手の移動先(列)を入力してください:");

while (1){
g_te_s_r = getchar();
if (g_te_s_r != '\n') // エンター以外が入力されたら
break; // whileループを抜ける
}

/* 後手の指し手の移動先(行)の入力 */
printf("\n後手の指し手の移動先(行)を入力してください:");

while (1){
g_te_s_g = getchar();
if (g_te_s_g != '\n') // エンター以外が入力されたら
break; // whileループを抜ける
}

/* 後手の移動元か移動先が先手陣地の場合 */
if (g_te_m_g > 6 || g_te_s_g > 6) {
printf("\n成りますか?(Yes:1, No:0):"); //成るか確認

while (1){
g_te_n = getchar();
if (g_te_n != '\n') // エンター以外が入力されたら
break; // whileループを抜ける
}
}
else {
g_te_n = 0;
}

printf("\n先手:%c%c→%c%c", s_te_m_r, s_te_m_g, s_te_s_r, s_te_s_g);
/* 先手が成るか */
if (s_te_n){
printf("成り");
}
else {
printf("成らず");
}

printf("\n後手:%c%c→%c%c", g_te_m_r, g_te_m_g, g_te_s_r, g_te_s_g);
/* 後手が成るか */
if (g_te_n){
printf("成り");
}
else {
printf("成らず");
}

}

printf("\n");
printf("\n");
return 0;
}


将時画面16021704


相手陣地に入った時と、相手陣地から動く時に成るかどうかの確認を入れました。


ソース:stime_16021703


/* stime.c */

#include <stdio.h>

int main()
{
int s_te_m; //先手の指し手の移動元
int s_te_s; //先手の指し手の移動先
int s_te_n; //先手の成りフラグ

int g_te_m; //後手の指し手の移動元
int g_te_s; //後手の指し手の移動先
int g_te_n; //後手の成りフラグ


printf(" 9 8 7 6 5 4 3 2 1 \n");
printf("┌─┬─┬─┬─┬─┬─┬─┬─┬─┐\n");
printf("│香│桂│銀│金│王│金│銀│桂│香│一\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │飛│ │ │ │ │ │角│ │二\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│歩│歩│歩│歩│歩│歩│歩│歩│歩│三\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │ │ │ │ │ │ │ │ │四\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │ │ │ │ │ │ │ │ │五\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │ │ │ │ │ │ │ │ │六\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│歩│歩│歩│歩│歩│歩│歩│歩│歩│七\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │角│ │ │ │ │ │飛│ │八\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│香│桂│銀│金│玉│金│銀│桂│香│九\n");
printf("└─┴─┴─┴─┴─┴─┴─┴─┴─┘\n");

/* 先手の指し手の入力 */
printf("\n先手の指し手の移動元を入力してください:");
scanf_s("%d", &s_te_m);
printf("\n先手の指し手の移動先を入力してください:");
scanf_s("%d", &s_te_s);

/* 先手の移動元か移動先が後手陣地の場合 */
if (s_te_m % 10 < 4 || s_te_s % 10 < 4) {
printf("\n成りますか?(Yes:1, No:0):"); //成るか確認
scanf_s("%d", &s_te_n);
}
else {
s_te_n = 0;
}

/* 後手の指し手の入力 */
printf("\n後手の指し手の移動元を入力してください:");
scanf_s("%d", &g_te_m);
printf("\n後手の指し手の移動先を入力してください:");
scanf_s("%d", &g_te_s);

/* 後手の移動元か移動先が先手陣地の場合 */
if (g_te_m % 10 > 6 || g_te_s % 10 > 6) {
printf("\n成りますか?(Yes:1, No:0):"); //成るか確認
scanf_s("%d", &g_te_n);
}
else {
g_te_n = 0;
}

printf("\n先手:%d→%d", s_te_m, s_te_s);
/* 先手が成るか */
if (s_te_n){
printf("成り");
}
else {
printf("成らず");
}

printf("\n後手:%d→%d", g_te_m, g_te_s);
/* 後手が成るか */
if (g_te_n){
printf("成り");
}
else {
printf("成らず");
}

printf("\n");
return 0;
}


将時画面16021703


指し手を7七から7六の場合、7776のように入力してもらうようにしました。


ソース:stime_16021702


/* stime.c */

#include <stdio.h>

int main()
{
int s_te; //先手の指し手
int g_te; //後手の指し手

printf(" 9 8 7 6 5 4 3 2 1 \n");
printf("┌─┬─┬─┬─┬─┬─┬─┬─┬─┐\n");
printf("│香│桂│銀│金│王│金│銀│桂│香│一\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │飛│ │ │ │ │ │角│ │二\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│歩│歩│歩│歩│歩│歩│歩│歩│歩│三\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │ │ │ │ │ │ │ │ │四\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │ │ │ │ │ │ │ │ │五\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │ │ │ │ │ │ │ │ │六\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│歩│歩│歩│歩│歩│歩│歩│歩│歩│七\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │角│ │ │ │ │ │飛│ │八\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│香│桂│銀│金│玉│金│銀│桂│香│九\n");
printf("└─┴─┴─┴─┴─┴─┴─┴─┴─┘\n");

printf("\n先手の指し手を入力してください:");
scanf_s("%d", &s_te);
printf("\n後手の指し手を入力してください:");
scanf_s("%d", &g_te);

printf("\n先手:%d\n", s_te);
printf("\n後手:%d\n", g_te);

return 0;

}


将時画面16021702


とりえあえず、コンソールアプリケーションで画面表示してみました。


ただ、printf()で表示しただけです。


後手の駒の文字の回転ができなそうなので、色分けが課題ですね。


ソース:stime_16021701


/* stime.c */

#include <stdio.h>

int main()
{
printf(" 9 8 7 6 5 4 3 2 1 \n");
printf("┌─┬─┬─┬─┬─┬─┬─┬─┬─┐\n");
printf("│香│桂│銀│金│王│金│銀│桂│香│一\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │飛│ │ │ │ │ │角│ │二\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│歩│歩│歩│歩│歩│歩│歩│歩│歩│三\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │ │ │ │ │ │ │ │ │四\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │ │ │ │ │ │ │ │ │五\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │ │ │ │ │ │ │ │ │六\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│歩│歩│歩│歩│歩│歩│歩│歩│歩│七\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│ │角│ │ │ │ │ │飛│ │八\n");
printf("├─┼─┼─┼─┼─┼─┼─┼─┼─┤\n");
printf("│香│桂│銀│金│玉│金│銀│桂│香│九\n");
printf("└─┴─┴─┴─┴─┴─┴─┴─┴─┘\n");

return 0;
}


将時画面16021701


初めまして、ショーです。

今は、家電の販売員です。

何のとりえもない自分ですけど、趣味でコンピュータ将棋の開発をしてみようと思いました。


本格的にブログを書くのも初めてで、飾ったりするのも苦手です。

開発記録として記載していきます。


私は、将棋の棋力は高くはありませんので、自分より強くしていくのが非常に楽しみです。

高校の数学の成績は良かったですけど、コンピュータの専門学校中退でプログラミング技術も未熟です。


ブログの読者が増えるとは思いませんけど、何かありましたら、コメント頂けると嬉しいです。

開発に支障が出ないくらいなら、喜びます。


さて、2月11日にブロードバンド開通後に、環境を整えていたcorei3のパソコンが電源入らなくなりましたので、急遽中古のパソコンを調達しました。


celeronですが、SSDなので意外と快適です。
ただし、windows7でwindows updateの時間がかかりすぎるので、windows7から、windows10にアップデートしました。


いずれは、将棋GUIソフト「将棋所」を利用するために、思考エンジンのLesserkaiのソースをコンパイルできるVisual Studio Community 2013をインストールしました。
日本語化でエラーが出ましたけど、めげずにインストール終了。


C言語の入門書の最初のプログラムを入力して、実行ファイルの作成も手探りで、なんとかテスト終了。
これで、0からの開発に取り掛かれます。