“你处理情绪的速度,就是你迈向成功的速度。”

C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。之前在之后上看过一段话“C语言水平决定你C++水平的上限”。

今天第一次分享,争取每天敲代码,分享在这里。

相比于C语言书上,利用C语言解决数学问题的例子太多了,真正让人们感兴趣的,我想就是设计一些有意思的程序。这里提供一个“井字棋”小程序。可以作为在进入学习指针部分之前的一个综合应用。

井字棋的规则可自行百度哈!

主程序:

#include"game.h"int main()
{void menu();void game();int input;do{menu();printf("请选择:\t");scanf("%d", &input);switch (input){case 1:printf("欢迎来到三子棋游戏\n");game();break;case 0:printf("退出!");break;default:printf("输入有误,请重新输入!");break;/*break结束switch*/}} while (input);return 0;
}void menu()
{printf("************************\n");printf("******1.Play Games******\n");printf("******0.Exit************\n");printf("************************\n");
}void game()
{srand((unsigned)time(NULL)); //产生一个种子,需要调用两个库函数time.h和stdlib.hchar board [ROW][COL];//二维数组的初始化问题InitBoard(board, ROW, COL);//二维数组棋盘的实现DisplayBoard(board, ROW, COL);char ret=0;//玩家先手下棋do{PlayerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);ret=IsWin(board, ROW, COL);//如果玩家赢,ret为*;如果电脑赢,ret为#;如果平局,ret为Q;都一定要跳出循环!                        if (ret != 'C')break;ComputerMove(board, ROW, COL);DisplayBoard(board, ROW, COL);ret=IsWin(board, ROW, COL);if (ret != 'C')break;} while(1);//判断因为什么跳出了循环?是玩家赢?是平局?还是电脑赢?switch (ret){case '*':printf("玩家赢!\n");break;case '#':printf("电脑赢!\n");break;default:printf("平局!\n");break;}DisplayBoard(board, ROW, COL);
}

接下来把game.h的头文件给出:

#pragma once
#include<stdio.h>
#include <stdlib.h>
#include <time.h>#define ROW 3
#define COL 3void InitBoard(char board[ROW][COL],int row, int col);void DisplayBoard(char board[ROW][COL], int row, int col);void PlayerMove(char board[ROW][COL], int row,int col);void ComputerMove(char board[ROW][COL], int row, int col);char IsWin(char board[ROW][COL], int row, int col);

真正的游戏程序运行段:

#include"game.h"void InitBoard(char board[ROW][COL], int row, int col)
{for (int i = 0; i < row; i++)for (int j = 0; j < col; j++)board[i][j] = ' ';}void DisplayBoard(char board[ROW][COL], int row, int col)
{for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){printf(" %c ",board[i][j]);if (j < col - 1)printf("|");}printf("\n");if (i < row - 1){for (int j = 0; j < col; j++){printf("---");if (j < col - 1)printf("|");}printf("\n");}}}void PlayerMove(char board[ROW][COL], int row,int col)
{int x, y;do{printf("玩家走,请输入坐标:\n");scanf("%d %d", &x, &y);if (x < row+1 && y < col+1 && x>0 && y>0){if(board[x - 1][y - 1] != ' ')printf("该处已被占用,请重新输入!\n");else{board[x - 1][y - 1] = '*';break;}}elseprintf("输入有误!请重新输入!\n");} while (1);}void ComputerMove(char board[ROW][COL], int row, int col)
{printf("电脑下!\n");while (1){int x = rand()%row;int y = rand()%col;if (board[x][y] == ' '){board[x][y] = '#';break;}elsecontinue;}
}//判断平局和继续,是IsWin的调用函数
char IsDraw(char board[ROW][COL], int row, int col)
{for(int i=0;i<row;i++)for (int j = 0; j < col; j++){if (board[i][j] == ' ')return 'C';}return 'Q';
}//判断输赢
char IsWin(char board[ROW][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][1] != ' ')return board[i][1];}for (int i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')return board[1][i];}char ret=IsDraw(board, row, col);return ret;}

不过,这个程序只能是电脑玩家【简单版】,因为电脑下棋的逻辑完全的随机的,后续如果有时间,会在推出一个电脑玩家【进阶版】。

互相讨论,共同进步!

C语言综合应用实例(1)相关推荐

  1. [R语言基础]——数据处理实例

    [R语言基础]--数据处理实例 前言 问题 Step1:建立数据框 Step2:计算综合得分 Step3:对学生进行评分 Step4:根据姓氏和名字排序 完整代码 前言 之前我们已经学习了R对数据预处 ...

  2. 经典好书:DSP嵌入式常用模块与综合系统设计实例精讲

    书名:DSP嵌入式常用模块与综合系统设计实例精讲 作者:刘向宇 副书名:DSP嵌入式常用模块与综合系统设计实例精讲 出版日期:2009-07-01 出版社:电子工业出版社 页数:406 ISBN:97 ...

  3. c语言条件编译的例子,C语言条件编译分析实例

    C语言条件编译分析实例 1.利用#ifdef / #endif 将程序功能模块包括进去,以向某用户提供该功能. 在程序首部定义#define HNLD: #ifdef HNLD include&quo ...

  4. xml控制html样式,XML与CSS综合设置实例

    XML与CSS综合设置实例 HTTP代码如下: @charset "utf-8"; @charset "utf-8"; bookname{ display:bl ...

  5. C语言综合期末作业,内蒙古农业大学2010年期末c语言综合作业.doc

    内蒙古农业大学2010年期末c语言综合作业 综合练习作业 #include int main(void) { int choice,i; void shuai();void ge();void wan ...

  6. 用数据结构c语言写成绩排序,C语言数据结构 快速排序实例详解

    C语言数据结构 快速排序实例详解 一.快速排序简介 快速排序采用分治的思想,第一趟先将一串数字分为两部分,第一部分的数值都比第二部分要小,然后按照这种方法,依次对两边的数据进行排序. 二.代码实现 # ...

  7. c语言编程经典实例利润,C语言经典编程实例100题解答

    C语言经典编程实例100题 答案+答案 C语言经典编程实例100题C语言程序实例100个(一) [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数,都是多少, 1.程序 ...

  8. 【视频】什么是梯度下降?用线性回归解释和R语言估计GARCH实例

    全文链接:http://tecdat.cn/?p=23606 梯度下降是一种优化算法,能够为各种问题找到最佳解决方案(点击文末"阅读原文"获取完整代码数据). 梯度下降是什么? 梯 ...

  9. msp430单片机c语言应用程序,MSP430单片机C语言应用程序设计实例精讲

    本书首先介绍了C语言的基本知识,使读者能使用C语言进行程序设计:然后介绍了30个开发例子.全书主要通过实例的形式来介绍MSP430单片机在不同领域中的应用,从而使读者掌握MSP430单片机开发的流程. ...

最新文章

  1. CVPR 2022 | 室外多模态3D目标检测(DeepFusion)
  2. golang time.After 超时使用理解
  3. Amazon AWS云计算服务简介
  4. LPC1768外部中断与GPIO中断
  5. Oracle入门(十四.21)之创建DML触发器:第二部分
  6. 代码的简单就在于——直接能看懂
  7. 信息学奥赛C++语言:回型方阵
  8. PHP正则提取table中数据
  9. RTT的IPC机制篇——邮箱
  10. junit依赖_3、Spring 中的依赖注入(DI),你都知道多少?
  11. Jmeter如何将上一个请求的结果作为下一个请求的参数——使用正则表达式提取器转载...
  12. 超强阵容实操教学, 0 基础 Flink 训练营免费抢报啦!
  13. data 谷歌浏览器更改user 路径_安卓微信 7.0.13.2开启众测邀请,数据存储路径迁移...
  14. 企业微信api,企业微信sdk接口java调用源码
  15. 逃脱只会部署集群系列 —— k8s集群的网络模型与跨主机通信
  16. Vue3 组件示例工程(二) —— AQI组件
  17. uni-app分分钟解决苹果X以上型号黑线条兼容问题
  18. java bsdiff_Android差分包生成和合成新包-bsdiff
  19. [COPY]《京东技术解密》——海量订单处理
  20. 安卓领域高质量公众号推荐

热门文章

  1. Android 屏幕适配问题
  2. 【linux系】压缩命令tar: Cowardly refusing to create an empty archive
  3. Linux入门命令小结
  4. 北宋画家张择端(存世作品)
  5. 宽带连接错误711:无法加载远程访问服务连接管理器
  6. C#获取给定日期所在周次
  7. java相册_JavaWeb在线电子相册springmvc
  8. 为什么Python多线程反而更慢了?
  9. 信息管理毕业设计 SSM的在线音乐网站设计与实现(源码+论文)
  10. 全民小镇好友帮助生产攻略 刷爱心刷经验刷金币超快