C 语言控制台实现五子棋项目
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C 语言控制台实现五子棋项目相关的知识,希望对你有一定的参考价值。
花了一天时间实现了控制台五子棋项目,把项目贴上来。也算是告一段落了。
为了进一步了解C语言编程,熟悉优秀的编码风格,提升编码能力,丰富项目经验。所以在编程初期选择了控制台小游戏《单机五子棋》作为项目进行编码。
本项目定位:
控制台小程序,作为熟悉一个完整的项目流程存在。
项目周期:
一星期。
实际时间:
一天。(2016年4月5日)
游戏功能:
首先实现能够让双人进行对战,最后得出胜负(结果)。然后加入人机对战元素,也就是传统意义上一个人玩的单机游戏。
编码风格:
C语言面向过程编程,变量名与函数名全部使用驼峰命名法。
代码:
#include <stdio.h> // 标准库 #include <conio.h> // 按键 #include <Windows.h> // 屏幕刷新 #include <stdlib.h> // 随机数 static const int wArr = 15; static const int hArr = 15; int temp = 0; int allRound = 0; int iMap[wArr][hArr] = {}; void initMap(); void showMap(); void getUserInput(); void userInput(int width, int height); void whoIsWin(); void aiInput(int w, int h); bool notherUser = true; // 区分用户 int myChess = 0; int whiteChess = 22; int blackChess = 33; int main() { int InputW = 0; int InputH = 0; initMap(); while (1) { showMap(); getUserInput(); system("CLS"); whoIsWin(); if (20000 == allRound) break; } showMap(); if (notherUser) { printf("User2, Win\n"); } else { printf("User1, Win\n"); } return 0; } void initMap() { for (int i = 0; i < wArr; ++i) { for (int j = 0; j < hArr; ++j) { iMap[i][j] = NULL; } } for (int i = 0; i < wArr; ++i) { iMap[i][0] = temp++; } temp = 0; for (int i = 0; i < wArr; ++i) { iMap[0][i] = temp++; } temp = 0; } void showMap() { for (int i = 0; i < wArr; ++i) { for (int j = 0; j < hArr; ++j) { printf("%3.0d", iMap[i][j]); } printf("\n"); } } void getUserInput() { int w, h; if (notherUser) { printf("User1:\n"); myChess = whiteChess; // ============ 用户输入 scanf_s("%d %d", &w, &h); userInput(w, h); } else { printf("User2:\n"); myChess = blackChess; // 下面是 AI 部分 aiInput(rand()%wArr, rand()%hArr); } } void userInput(int w, int h) { if (w >= wArr || w <= 0 || h >= hArr || h <= 0) { return; } else if (iMap[w][h] == whiteChess || iMap[w][h] == blackChess) { return; } iMap[w][h] = myChess; notherUser = !notherUser; } void aiInput(int w, int h) { if (w >= wArr || w <= 0 || h >= hArr || h <= 0) { return; } else if (iMap[w][h] == whiteChess || iMap[w][h] == blackChess) { return; } iMap[w][h] = myChess; notherUser = !notherUser; } void whoIsWin() { for (int i = 0; i < wArr; ++i) { for (int j = 0; j < hArr; ++j) { if(iMap[i][j] > 0) // 竖排五个 if (iMap[i + 0][j] == iMap[i + 1][j] && iMap[i + 1][j] == iMap[i + 2][j] && iMap[i + 2][j] == iMap[i + 3][j] && iMap[i + 3][j] == iMap[i + 4][j] //&& iMap[i + 4][j] == iMap[i + 5][j] ) { allRound = 20000; } // 右斜五个 else if (iMap[i + 0][j + 0] == iMap[i + 1][j + 1] && iMap[i + 1][j + 1] == iMap[i + 2][j + 2] && iMap[i + 2][j + 2] == iMap[i + 3][j + 3] && iMap[i + 3][j + 3] == iMap[i + 4][j + 4] //&& iMap[i + 4][j + 4] == iMap[i + 5][j + 5] ) { allRound = 20000; } // 左斜五个 else if (iMap[i + 0][j + 0] == iMap[i - 1][j + 1] && iMap[i - 1][j + 1] == iMap[i - 2][j + 2] && iMap[i - 2][j + 2] == iMap[i - 3][j + 3] && iMap[i - 3][j + 3] == iMap[i - 4][j + 4] //&& iMap[i - 4][j + 4] == iMap[i - 5][j + 5] ) { allRound = 20000; } // 横排五个 else if (iMap[i][j + 0] == iMap[i][j + 1] && iMap[i][j + 1] == iMap[i][j + 2] && iMap[i][j + 2] == iMap[i][j + 3] && iMap[i][j + 3] == iMap[i][j + 4] //&& iMap[i][j + 4] == iMap[i][j + 5] ) { allRound = 20000; } } } }
以上是关于C 语言控制台实现五子棋项目的主要内容,如果未能解决你的问题,请参考以下文章