三子棋小游戏及如何让朋友也能玩自己写的游戏(程序)(exe如何附带动态链接库dll)C语言从入门到入土(入门特别篇)(一)

简介: 一:三子棋 1.游戏的基本开始流程() 2.三子棋的实现 2.1第一步写出基本流程 2.2第二步打印菜单 2.3游戏的实现 2.3.1初始化棋盘 2.3.2打印棋盘 2.3.3玩家下棋 2.3.4电脑下棋 2.3.5判断 2.4游戏的整个代码 game.c: 2.5三子棋的扩展 二:vs如何发布exe文件并附带动态链接库 第一步:vs->工具->命令行->开发者 PowerShell(P) 第二步:查看vs 是Debug还是Releas 是x86还是x64 第三步:找到exe所在位置 第四步:查询你exe文件所需要的的动态链接库(dll)

一:三子棋

1.游戏的基本开始流程()

首先肯定是main函数的创建:

test.c:

1. int main()
2. {
3.  test();
4.  return 0;
5. }

这里我们为了使其看起来简单就把后续的流程用test函数去接收

test.c:

//这是我们刚才的test函数
void test()
{
  //这里我们创建input 来接收我们刚开始要去选择的值
  int input = 0;
  //我们进来后就可以打印一个菜单,告诉玩家有哪些选项
  menu();
  //对于游戏开始,我们可以使用do while循环(先使用,后判断),因为只要玩家
  //点击进来就一定要进行选择。
  //这整个就是一个最初始的模板,大家一定要记住哈!
  //这样以后自己去写的话思路就很清晰,只有自己思路清晰了才能写出好的代码,当然出BUG的
  //概率也会小很多哈!别一杯茶一支烟,一个BUG一整天哈哈!(前两天体验过了QAQ)
  do
  {
    printf("请选择:\n");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      printf("开始游戏\n");
      game();
      break;
      //这个case 0 为退出大家最好以后就这么规定,为什么看下面的补充
    case 0:
      printf("退出游戏\n");
      break;
    default:
      printf("输入错误,请重新选择\n");
      break;
    }
    //接上,因为如果input==0,我们想要退出时输入0,上面会打印退出游戏,
    //但真正要退出游戏还是要看while()里面的值是否为0,但如果我们把input
    //传进while()里面,当我们输入0时 while循环判断为假,就真正的退出循环也就
    //是退出游戏了哈!所以大家记住这两点哈,1是case: 0退出游戏
    //2是while()里面放input。
  } while (input);
}

以上就是对于大部分游戏的基本流程,接下来我们来进行补充。


2.三子棋的实现


开始之前,我先为大家说明,当我们实现较为复杂的代码时,我们一般会创建三个项目,以我们这个游戏为例,我们就创建了 test.c game.c game.h,前面的是我们测试代码的地方,后面两个合起来为游戏的实现。


好的接下来我们正式开始:


有了上面的游戏基本流程,就到了游戏的实现,我们还是要先有一个思路,要知道我们要干什么,怎么干是后面的事情,重点思路还是要清晰。


这个三子棋的样子我先给大家展示:


46.png


可以知道我们游戏实现的思路大致为5点:

1.初始化棋盘

2.打印棋盘

3.玩家下棋

4.电脑下棋

5.判断


2.1第一步写出基本流程

test.c:


void test()
{
  int input = 0;
  menu();
  do
  {
    printf("请选择:\n");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      printf("开始游戏\n");
      game();
      break;
    case 0:
      printf("退出游戏\n");
      break;
    default:
      printf("输入错误,请重新选择\n");
      break;
    }
  } while (input);
}

2.2第二步打印菜单

这个里面就自己设计就行,但是最好遵循我上面说的两点:

test.c:

void menu()
{
  printf("**********************************\n");
  printf("******         1.play       ******\n");
  printf("******         2.exit       ******\n");
  printf("**********************************\n");
}

2.3游戏的实现


这里提一点,我们用#define来定义 ROW(行)和COL(列),因为这样我们可以更好地去维护我们的代码,后期想要改成更大的棋盘直接改这两个值就可以了,而且对于写的较多代码的实现,我们尽可能去用有意义的值去定义他们,以便于提升代码的阅读能力。


test.c:


void game()
{
  char Board[ROW][COL] = { 0 };
  //初始化棋盘
  InitBoard(Board, ROW, COL);
  //打印棋盘
  DisplayBoard(Board, ROW, COL);
  //下棋
  while (1)
  {
    //玩家下棋  *
    printf("玩家下棋:\n");
    Player_move(Board, ROW, COL);
    DisplayBoard(Board, ROW, COL);
    //电脑下棋  #
    printf("电脑下棋\n");
    Computer_move(Board, ROW, COL);
    DisplayBoard(Board, ROW, COL);
  }

当然写到这里了就少不了函数的声明,前面我们说了,我们要把函数的声明放在一个叫做game.h的头文件当中,这里我就直接把所有的代码发出来了防止大家代码太多搞混:

game.h:

#pragma once
//上面这行大家不用管哈,等文件操作部分会讲,但是可以提一下这个的意思就是当有两个一样的
//头文件被声明时就只会保留一个就这个意思哈!
#define ROW 3
#define COL 3
//这是刚刚定义的行和列
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//对于函数的名称大家可以发现都是有特殊意义的,这是很重要的哈!不然写完了自己不知道写的什么
//别人也不知道那就尴尬了哈!
//初始化棋盘声明
void InitBoard(char Board[ROW][COL],int row,int col);
//打印棋盘声明
void DisplayBoard(char Board[ROW][COL],int row,int col);
//玩家下棋声明
void Player_move(char Board[ROW][COL], int row, int col);
//电脑下棋声明
void Computer_move(char Board[ROW][COL], int row,int col);
//胜利声明
char Is_win(char Board[ROW][COL], int row, int col);
//平局声明
int Is_full(char Board[ROW][COL], int row, int col);


然后提一下,这里我们传的参数都是数组和他的行数和列数


还有这路的row和col都是小写并不是大写是因为大写的已经被定义了,我们不能重复使用因为他们根本就不是一个东西,还有个很重要的原因就是接收的行参一定要是变量!这里的大写已经被定义为常量了所以一定不能传过去


再然后就是接收数组或者常数的时候在前面要加上类型名,后面用 “;” 结尾,还有不用写返回类型,因为是函数的声明(只告诉程序有这么个函数),返回类型在函数的定义里面写,然后函数的定义是写在game.c里面的。

相关文章
|
1月前
|
C语言
扫雷游戏(用C语言实现)
扫雷游戏(用C语言实现)
83 0
|
8天前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
20 1
|
20天前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。
ly~
|
1月前
|
数据可视化 BI API
除了 OpenGL,还有哪些常用的图形库可以在 C 语言中使用?
除了OpenGL,C语言中还有多个常用的图形库:SDL,适合初学者,用于2D游戏和多媒体应用;Allegro,高性能,支持2D/3D图形,广泛应用于游戏开发;Cairo,矢量图形库,支持高质量图形输出,适用于数据可视化;SFML,提供简单接口,用于2D/3D游戏及多媒体应用;GTK+,开源窗口工具包,用于创建图形用户界面。这些库各有特色,适用于不同的开发需求。
ly~
158 4
|
1月前
|
C语言 C++
【C语言】编写“猜数字“小游戏
【C语言】编写“猜数字“小游戏
|
1月前
|
编译器 C语言
猜数字游戏实现#C语言
猜数字游戏实现#C语言
79 1
|
1月前
|
存储 C语言
揭秘C语言:泊舟的猜数字游戏
揭秘C语言:泊舟的猜数字游戏
|
1月前
|
存储 文件存储 C语言
深入C语言:文件操作实现局外影响程序
深入C语言:文件操作实现局外影响程序
|
1月前
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现
|
1月前
|
C语言
初学者指南:使用C语言实现简易版扫雷游戏
初学者指南:使用C语言实现简易版扫雷游戏
35 0