C 언어 로 삼자 기 를 실현 하 다
삼자 기의 의미:
삼자 기 는 흑백 바둑 의 일종 이다.삼자 기 는 구 궁 기,동그라미 포크,용 한 마리,정자 기 등 이 라 고도 부른다.정사각형 대각선 을 연결 하여 양쪽 에 세 개의 바둑 알 을 차례대로 놓 고 자신의 세 개의 바둑 알 을 한 줄 로 만 들 면 상대방 이 지 는 것 이다.하지만 비 기 는 경우 가 많다.그림 의 예 는 다음 과 같다.
기본 사고방식:
1.사용자 대화 메뉴 창 만 들 기
2.바둑판 초기 화
3.바둑판 패 널 보이 기
4.사용자 슬롯
5.승부 판단
6.컴퓨터 랜 덤 으로 정확 한 타 자 를 맞춘다.
7.승부 판단
(매번 프로그램 을 쓰기 전에 아래 그림 과 같이 사고방식 이나 위조 코드 를 쓸 수 있다)
다 중 파일 항목 만 들 기:
코드 를 쓰기 전에 먼저 세 개의 파일 을 만들어 서 순서 코드 가 더욱 완전 하고 선명 하 게 나타 날 수 있 도록 합 니 다.
1.사용자 대화 메뉴 창 만 들 기
void Meau(){
printf("+------ meau ----------+
");
printf("|---- 1.play --------|
");
printf("|---- 0.quit --------|
");
printf("+----------------------+
");
}
2.바둑판 초기 화매크로 정 의 를 사용 하여 바둑판 의 내용 을 빈 것 으로 초기 화 합 니 다.
static void InitBoard(char board[][COL], int row, int col){
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
board[i][j] = INIT;
}
}
}
3.바둑판 보이 기바둑판 을 반복 적 으로 표시 하지 않 기 위해 서 는 스크린 조작 을 사용 하여 매번 현실 적 인 바둑판 이 한 장 밖 에 없다.
끊 임 없 는 디 버 깅 을 통 해 최종 인터페이스 가 예상 한 인터페이스 와 일치 하도록 합 니 다.
static void ShowBoard(char board[][COL],int row,int col){
system("cls");//
printf(" ");
for (int i = 0; i < col; i++){
printf(" %3d", i + 1);
}
printf("
----------------
");
for (int i = 0; i < row; i++){
printf("%-2d", i + 1);
for (int j = 0; j < col; j++){
printf("| %c ", board[i][j]);
}
printf("
----------------
");
}
}
4.사용자 슬롯낙자 는 빈 자리 에 만 떨 어 질 수 있 기 때문에 낙자 전에 빈 판 을 해 야 한다.만약 에 비어 있 으 면 낙자 이다.그렇지 않 으 면 다시 떨 어 지 는 것 을 알려 준다.
static void PlayerMove(char board[][COL], int row, int col){
int x = 0;
int y = 0;
while (1){
printf("please enter your postion<x,y>: ");
scanf("%d %d", &x, &y);
if (x<1 || x>3 || y<1 || y>3){
printf("Postion Error!");
continue;
}
if (board[x - 1][y - 1] == INIT){
board[x - 1][y - 1] = WHITE;
break;
}
else{
printf("Postion Is Not Empty!
");
}
}
}
5.컴퓨터 랜 덤 으로 정확 한 타 자 를 맞춘다.무 작위 수 를 사용 하여 정확 한 위치 에 놓 습 니 다.
static void ComputerMove(char board[][COL], int row, int col){
while (1){
int x = rand() % row;
int y = rand() % col;
if (board[x][y] == INIT){
board[x][y] = BLACK;
break;
}
}
}
6.승 부 를 판단 한다
static char IsEnd(char board[][COL], int row, int col){
for (int i = 0; i < row; i++){
if (board[i][0] == board[i][1] && \
board[i][1] == board[i][2] && \
board[i][0] != INIT){
return board[i][0];
}
}
for (int j = 0; j < col; j++){
if (board[0][j] == board[1][j] && \
board[1][j] == board[2][j] && \
board[0][j] != INIT){
return board[0][j];
}
}
if (board[0][0] == board[1][1] && \
board[1][1] == board[2][2] && \
board[0][0] != INIT){
return board[0][0];
}
if(board[0][2] == board[1][1] && \
board[1][1] == board[2][0] && \
board[1][1] != INIT){
return board[1][1];
}
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
if (board[i][j] == INIT);
return NEXT;
}
}
return DRAW;
}
7.게임 인터페이스 만 들 기
void Game()
{
char board[ROW][COL];
InitBoard(board, ROW, COL);
srand((unsigned long)time(NULL));
char result = 0;
while (1){
ShowBoard(board, ROW, COL);
PlayerMove(board, ROW, COL);
result = IsEnd(board, ROW, COL);
if (result != NEXT){
break;
}
ShowBoard(board, ROW, COL);
ComputerMove(board, ROW, COL);
result = IsEnd(board, ROW, COL);
if (result != NEXT){
break;
}
}
ShowBoard(board, ROW, COL);
switch (result){
case WHITE:
printf("You win!
");
break;
case BLACK:
printf("you lose!
");
break;
case DRAW:
printf("it ends in a draw
");
break;
defult:
printf("bug
");
break;
}
}
전체 코드
//main.c
#include"game.h"
void Meau(){
printf("+------ meau ----------+
");
printf("|---- 1.play --------|
");
printf("|---- 0.quit --------|
");
printf("+----------------------+
");
}
int main(){
int select = 0;
int quit = 0;
while (!quit)
{
Meau();
printf("please enter your choose: ");
scanf("%d", &select);
switch (select)
{
case 1:
Game();
break;
case 0:
quit = 1;
break;
defult:
printf("Select error!Try again!
");
break;
}
}
printf("byebye!
");
system("pause");
return 0;
}
//game.c
#include"game.h"
static void InitBoard(char board[][COL], int row, int col){
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
board[i][j] = INIT;
}
}
}
static void ShowBoard(char board[][COL],int row,int col){
system("cls");
printf(" ");
for (int i = 0; i < col; i++){
printf(" %3d", i + 1);
}
printf("
----------------
");
for (int i = 0; i < row; i++){
printf("%-2d", i + 1);
for (int j = 0; j < col; j++){
printf("| %c ", board[i][j]);
}
printf("
----------------
");
}
}
static char IsEnd(char board[][COL], int row, int col){
for (int i = 0; i < row; i++){
if (board[i][0] == board[i][1] && \
board[i][1] == board[i][2] && \
board[i][0] != INIT){
return board[i][0];
}
}
for (int j = 0; j < col; j++){
if (board[0][j] == board[1][j] && \
board[1][j] == board[2][j] && \
board[0][j] != INIT){
return board[0][j];
}
}
if (board[0][0] == board[1][1] && \
board[1][1] == board[2][2] && \
board[0][0] != INIT){
return board[0][0];
}
if(board[0][2] == board[1][1] && \
board[1][1] == board[2][0] && \
board[1][1] != INIT){
return board[1][1];
}
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
if (board[i][j] == INIT);
return NEXT;
}
}
return DRAW;
}
static void PlayerMove(char board[][COL], int row, int col){
int x = 0;
int y = 0;
while (1){
printf("please enter your postion<x,y>: ");
scanf("%d %d", &x, &y);
if (x<1 || x>3 || y<1 || y>3){
printf("Postion Error!");
continue;
}
if (board[x - 1][y - 1] == INIT){
board[x - 1][y - 1] = WHITE;
break;
}
else{
printf("Postion Is Not Empty!
");
}
}
}
static void ComputerMove(char board[][COL], int row, int col){
while (1){
int x = rand() % row;
int y = rand() % col;
if (board[x][y] == INIT){
board[x][y] = BLACK;
break;
}
}
}
void Game()
{
char board[ROW][COL];
InitBoard(board, ROW, COL);
srand((unsigned long)time(NULL));
char result = 0;
while (1){
ShowBoard(board, ROW, COL);
PlayerMove(board, ROW, COL);
result = IsEnd(board, ROW, COL);
if (result != NEXT){
break;
}
ShowBoard(board, ROW, COL);
ComputerMove(board, ROW, COL);
result = IsEnd(board, ROW, COL);
if (result != NEXT){
break;
}
}
ShowBoard(board, ROW, COL);
switch (result){
case WHITE:
printf("You win!
");
break;
case BLACK:
printf("you lose!
");
break;
case DRAW:
printf("it ends in a draw
");
break;
defult:
printf("bug
");
break;
}
}
//game.h
#ifndef __GAME_H__
#define __GAME_H__
#include<stdio.h>
#include <time.h>
#include <stdlib.h>
#include<windows.h>
#pragma warning(disable:4996)
#define ROW 3
#define COL 3
#define INIT ' '
#define WHITE 'X'//player
#define BLACK 'O'//computer
#define DRAW 'D'
#define NEXT 'N'
extern void Game();
#endif
코드 결과 표시이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 구현 천둥 제거 게임 상세 정보먼저 작은 메뉴를 표시하고 게임을 할지 여부를 선택하십시오.사용자가 종료를 선택하면 프로그램 실행이 끝나고, 사용자가 게임을 선택하면 지뢰 제거 위치 좌표를 입력하라는 메시지가 표시됩니다.사용자가 입력한 좌표가 바둑...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.