三子棋小游戏及如何让朋友也能玩自己写的游戏(程序)(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里面的。

相关文章
|
2月前
|
C语言
C语言之斗地主游戏
该代码实现了一个简单的斗地主游戏,包括头文件引入、宏定义、颜色枚举、卡牌类、卡牌类型类、卡牌组合类、玩家类、游戏主类以及辅助函数等,涵盖了从牌的生成、分配、玩家操作到游戏流程控制的完整逻辑。
82 8
|
3月前
|
C语言
扫雷游戏(用C语言实现)
扫雷游戏(用C语言实现)
133 0
|
2月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
64 5
|
2月前
|
C语言
C语言编程中,错误处理至关重要,能提升程序的健壮性和可靠性
C语言编程中,错误处理至关重要,能提升程序的健壮性和可靠性。本文探讨了C语言中的错误类型(如语法错误、运行时错误)、基本处理方法(如返回值、全局变量、自定义异常处理)、常见策略(如检查返回值、设置标志位、记录错误信息)及错误处理函数(如perror、strerror)。强调了不忽略错误、保持处理一致性及避免过度处理的重要性,并通过文件操作和网络编程实例展示了错误处理的应用。
73 4
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
63 1
|
2月前
|
网络协议 物联网 数据处理
C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势
本文探讨了C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势。文章详细讲解了使用C语言实现网络通信程序的基本步骤,包括TCP和UDP通信程序的实现,并讨论了关键技术、优化方法及未来发展趋势,旨在帮助读者掌握C语言在网络通信中的应用技巧。
47 2
|
2月前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
49 2
|
2月前
|
程序员 C语言
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门。本文深入探讨了指针的基本概念、声明方式、动态内存分配、函数参数传递、指针运算及与数组和函数的关系,强调了正确使用指针的重要性,并鼓励读者通过实践掌握这一关键技能。
44 1
|
2月前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
39 1
|
2月前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。