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

2.4游戏的整个代码


test.c:


#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{
  printf("**********************************\n");
  printf("******         1.play       ******\n");
  printf("******         2.exit       ******\n");
  printf("**********************************\n");
}
//1.初始化棋盘
//2.打印棋盘
//3.玩家下棋
//4.电脑下棋
//5.判断
void game()
{
  char Board[ROW][COL] = { 0 };
  //初始化棋盘
  InitBoard(Board, ROW, COL);
  //打印棋盘
  DisplayBoard(Board, ROW, COL);
  //下棋
  int ret = 0;
  while (1)
  {
    //玩家下棋  *
    printf("玩家下棋:\n");
    Player_move(Board, ROW, COL);
    DisplayBoard(Board, ROW, COL);
    ret = Is_win(Board, ROW, COL);
    if (ret != 'C')
    {
      break;
    }
    //电脑下棋  #
    printf("电脑下棋\n");
    Computer_move(Board, ROW, COL);
    DisplayBoard(Board, ROW, COL);
    ret = Is_win(Board, ROW, COL);
    if (ret != 'C')
    {
      break;
    }
  }
  if (ret == '*')
  {
    printf("玩家胜利!!!\n");
  }
  else if (ret == '#')
  {
    printf("电脑胜利!!!\n");
  }
  else
  {
    printf("平局\n");
  }
}
void test()
{
  int input = 0;
  srand((unsigned)time(NULL));
  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);
}
int main()
{
  test();
  return 0;
}


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);

game.c:


#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void InitBoard(char Board[ROW][COL], int row, int col)
{
  int i = 0;
  int j = 0;
  for (i = 0; i < row; i++)
  {
    for (j = 0; j < col; j++)
    {
      Board[i][j] = ' ';
    }
  }
}
void DisplayBoard(char Board[ROW][COL], int row, int col)
{
  int i = 0;
  int j = 0;
  for (i = 0; i < ROW; i++)
  {
    //打印行
    for (j = 0; j < COL; j++)
    {
      printf(" %c ", Board[i][j]);
      if (j < COL - 1)
        printf("|");
    }
    printf("\n");
    //打印列
    for (j = 0; j < COL; j++)
    {
      printf("---");
      if (j < COL - 1)
        printf("|");
    }
    printf("\n");
  }
}
void Player_move(char Board[ROW][COL], int row, int col)
{
  int x = 0;
  int y = 0;
  while (1)
  {
    scanf("%d %d", &x, &y);
    if (x >= 1 && x <= row && y >= 1 && y <= col)
    {
      if (Board[x - 1][y - 1] == ' ')
      {
        Board[x - 1][y - 1] = '*';
        break;
      }
      else
      {
        printf("输过啦!!!\n");
      }
    }
    else
    {
      printf("输出去啦!!!!\n请重新输入:\n");
    }
  }
}
void Computer_move(char Board[ROW][COL], int row, int col)
{
  while (1)
  {
    int x = rand() % ROW;
    int y = rand() % COL;
    if (Board[x][y] == ' ')
    {
      Board[x][y] = '#';
      break;
    }
  }
}
int Is_full(char board[ROW][COL], int row, int col)
{
  int i = 0;
  int j = 0;
  for (i = 0; i < row; i++)
  {
    for (j = 0; j < col; j++)
    {
      if (board[i][j] == ' ')
      {
        return 0;
      }
    }
  }
  return 1;
}
//玩家赢返回 *
//电脑赢返回 #
//平局  返回 Q
//继续  返回 C
char Is_win(char Board[ROW][COL], int row, int col)
{
  int i = 0;
  //三行
  for (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 (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];
    }
  }
  //对角线的判断
  if (Board[0][0] == Board[1][1] && Board[1][1] == Board[2][2] && Board[1][1] != ' ')
  {
    return Board[1][1];
  }
  if (Board[0][2] == Board[1][1] && Board[1][1] == Board[2][0] && Board[1][1] != ' ')
  {
    return Board[1][1];
  }
  //判断平局
  if (1 == Is_full(Board, row, col))
  {
    return 'Q';
  }
  //继续
  return 'C';
}

2.5三子棋的扩展

大家可以发现,目前我们的电脑走时是靠随机数的生成,所以电脑就表现得十分笨拙,所以我们可以自己去思考一下,比如如果电脑发现自己有两个连在一起了,就直接放在第三个取得胜利,有还有如果发现玩家要连在一起了,就去阻断玩家等。这是个思考题哈!

相关文章
|
2月前
|
C语言
C语言之斗地主游戏
该代码实现了一个简单的斗地主游戏,包括头文件引入、宏定义、颜色枚举、卡牌类、卡牌类型类、卡牌组合类、玩家类、游戏主类以及辅助函数等,涵盖了从牌的生成、分配、玩家操作到游戏流程控制的完整逻辑。
82 8
|
3月前
|
C语言
扫雷游戏(用C语言实现)
扫雷游戏(用C语言实现)
133 0
|
2月前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
49 2
|
2月前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
39 1
|
2月前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。
ly~
|
3月前
|
数据可视化 BI API
除了 OpenGL,还有哪些常用的图形库可以在 C 语言中使用?
除了OpenGL,C语言中还有多个常用的图形库:SDL,适合初学者,用于2D游戏和多媒体应用;Allegro,高性能,支持2D/3D图形,广泛应用于游戏开发;Cairo,矢量图形库,支持高质量图形输出,适用于数据可视化;SFML,提供简单接口,用于2D/3D游戏及多媒体应用;GTK+,开源窗口工具包,用于创建图形用户界面。这些库各有特色,适用于不同的开发需求。
ly~
708 4
|
3月前
|
C语言 C++
【C语言】编写“猜数字“小游戏
【C语言】编写“猜数字“小游戏
108 1
|
3月前
|
编译器 C语言
猜数字游戏实现#C语言
猜数字游戏实现#C语言
107 1
|
3月前
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现
|
3月前
|
C语言
初学者指南:使用C语言实现简易版扫雷游戏
初学者指南:使用C语言实现简易版扫雷游戏
55 0