C语言_三子棋小游戏
2018-04-06 16:52
363 查看
三子棋(c语言版)
游戏是在3*3的棋盘上输入坐标,其主要功能有:
(1),玩家走(2),电脑走
(3),打印棋盘
(4),判断输赢
(5),判断是不是平局
头文件一个,game.h
源文件有2个,分别是test.c 和 game.c
代码如下:
game.h(头文件)
//三子棋游戏 # ifndef __GAME_H__ #define __GAME_H__ #include <stdio.h> #include <stdlib.h> #include <time.h> # define H 3 # define L 3 void display_board (char arr[H][L], int h, int l);//打印棋盘 void player_move(char arr[H][L], int h, int l);//玩家走 void computer_move(char arr[H][L], int h, int l);//电脑走 char is_win (char arr[H][L], int h, int l);//判断输赢 #endif
test.c(主要是测试游戏功能)
#include <stdio.h> #include "game.h" void menu () { printf ("*********************************\n"); printf ("****** 五子棋游戏 *******\n"); printf ("******** 1、开始游戏 ********\n"); printf ("******** 0、结束游戏 ********\n"); printf ("*********************************\n"); } void empty (char arr[H][L], int h, int l) { int i = 0, j = 0; for (i=0; i<H; i++) { for (j=0; j<L; j++) { arr[i][j] = ' '; } } } void game () { int i = 0, j = 0; char ret = '0'; char arr[H][L] = {'0'}; empty (arr, H, L); display_board(arr, H, L); while (1) { player_move(arr,H,L);//玩家走 display_board(arr, H, L);//打印棋盘 ret = is_win(arr, H, L);//判断输赢 if (ret == 'X') { printf ("玩家赢\n"); break; } else if (ret == 'P') { printf ("平局\n"); empty (arr, H, L); break; } computer_move(arr, H, L);//电脑走 display_board(arr, H, L);//打印棋盘 ret = is_win(arr, H, L);//判断输赢 if (ret == '0') { printf("电脑赢\n"); //empty (arr, H, L); break; } else if (ret == 'P') { printf ("平局\n"); empty (arr, H, L); break; } } } int main() { int input = 0; srand ((unsigned) time (NULL)); do { menu (); printf ("请选择1(play)/0(exit):\n"); scanf ("%d",&input); switch (input) { case 0:printf ("结束游戏\n"); break; case 1: game (); break; default :printf ("输入错误\n"); break; } } while(input); system ("pause"); return 0; }
game.c(游戏的主要代码)
#include "game.h" //打印棋盘 void display_board (char arr[H][L],int h,int l) { int i, j; for (i=0; i<h; ++i) { for (j=0; j<l; ++j) { printf (" %c ",arr[i][j]); if (j<(l-1)) { printf ("|"); } } printf ("\n"); if (i < (h-1)) { for (j=0; j<h; ++j) { printf ("--- "); } printf ("\n"); } } } //玩家走 void player_move(char arr[H][L], int h, int l) { int a = 0, b = 0; printf ("请输入你要走的坐标:\n"); while (1) { scanf ("%d%d",&a,&b); if ((a>0&&a<=h) && (b>0&&b<= l))//判断坐标合法性 { if(arr[a-1][b-1] == ' ')//判断该坐标有没有被占用 { arr[a-1][b-1] = 'X'; break; } else { printf ("该坐标已经被占用,请重新输入:\n"); } } else { printf ("非法坐标,请重新输入:\n"); } } } // 电脑走 void computer_move(char arr[H][L], int h, int l) { while (1) { int i = (rand ()) % 3; int j = (rand ()) % 3; if(arr[i][j] == ' ')//判断该坐标有没有被占用 { arr[i][j] = '0'; printf ("电脑走的坐标:%d %d\n",i+1,j+1); break; } } } char is_win(char arr[H][L], int h, int l) { int i = 0, j = 0, count1, count2, count3, count4 ; //横 for (i=0;i<h;++i) { count1 = 0; for (j=0; j<l-1; ++j) { if (arr[i][j] == arr[i][j+1]) { count1 ++; if (count1 == l-1) { return arr[i][j]; } } } } //竖 for (i=0;i<l;++i) { count2 = 0; for (j=0; j<h-1; ++j) { if (arr[j][i] == arr[j+1][i]) { count2 ++; if (count2 == h-1) { return arr[j][i]; } } } } //斜 //正对角线 count3=0; for (i=0; i<l-1;++i) { if (arr[i][i] == arr[i+1][i+1]) count3 ++; if (count3 == l-1) return arr[i][i]; } // 反对角线 i = l-1; j = 0; count4 = 0; while (i>=0) { if (arr[i][j] == arr[i-1][j+1]) { count4 ++; } if (count4 == l-1) { return arr[i][j]; } i--; j++; } //判断棋盘是否填满 for (i=0; i<h; ++i) { for (j=0; j<l; ++j) { if (arr[i][j] == ' ') return '1'; } } return 'P'; }
相关文章推荐
- 【C语言】三子棋小游戏 5*5
- C语言实现小游戏——三子棋(Three Peices Chess)
- 用C语言实现三子棋小游戏
- 小游戏三子棋的C语言代码实现
- C语言实现简单的三子棋小游戏
- 三子棋小游戏--C语言
- 【三子棋】用c语言编写一个小游戏---三子棋
- 用c语言编写三子棋小游戏
- C语言 三子棋 小游戏
- 小游戏——三子棋(C语言实现)
- 用C语言实现简单的三子棋小游戏
- 小游戏 | 井字棋(三子棋)的C语言实现
- C语言小游戏"三子棋"
- C语言实现三子棋小游戏
- C语言小游戏---三子棋
- C语言实现简单的三子棋小游戏
- c语言小程序之三子棋小游戏的实现
- C语言小游戏之猜数字,三子棋游戏
- C语言实现小游戏---三子棋
- C语言小游戏----三子棋