1.srand函数、time函数
(1)srand()函数表示设置一个随机种子,每次运行都能使随机种子不同,但如果重新运行会与上次运行时的结果一样,可配合时间戳time()函数解决,srand()函数类型为unsigned int,头文件为
(2)语句:srand((unsigned int)time(NULL))------>由于类型不兼容,需强制类型转换
2.rand函数
(1)设置了随机种子之后配合rand函数产生一个随机数,生成范围:[0,32769],若需控制生成范围可通过%的办法来获取所需的范围
(2)Eg:生成一个随机数范围为[0,99],语句:rand()%100
3.实现三子棋小游戏
(1)头文件lin.h(声明函数)
#pragma once #include#include #include //行 #define ROW 3 //列 #define COL 3 //声明控制间距 void distance(); //声明初始化棋盘为空格 void My_lin(char arr[ROW][COL], int row, int col); //声明打印棋盘 void My_print(char arr[ROW][COL],int row,int col); //声明玩家下棋 void My_qin(char arr[ROW][COL],int row, int col); //声明电脑下棋 void My_yan(char arr[ROW][COL], int row, int col); //声明判断输赢 char My_li(char arr[ROW][COL], int row, int col);
(2)源文件lin.c(实现函数)
#include"lin.h" //实现控制间距 void distance() { printf("nnn"); } //实现初始化棋盘为空格 void My_lin(char arr[ROW][ROW], int row, int col) { for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { arr[i][j] = ' '; } } } //实现打印棋盘 void My_print(char arr[ROW][COL], int row, int col) { int i = 0; for (i = 0; i < row; i++) { int j = 0; for (j = 0; j < col; j++) { printf(" %c ", arr[i][j]); if (j < col - 1) { printf("|"); } } printf("n"); if (i < row - 1) { printf("---|---|---n"); } } } //实现玩家下棋 void My_qin(char arr[ROW][COL], int row, int col) { int x = 0; int y = 0; while (1) { printf("玩家回合n"); printf("请输入坐标(坐标请用空格隔开):"); scanf("%d %d", &x, &y); if (x >= 1 && x <= row && y >=1 && y <= col) { if (arr[x - 1][y - 1] == ' ') { arr[x - 1][y - 1] = '*'; break; } else { printf("坐标以被占用,请重新输入n"); //控制间距 distance(); } } else { printf("坐标无效,请重新输入n"); } } } //实现电脑下棋 void My_yan(char arr[ROW][COL], int row, int col) { int x = 0; int y = 0; printf("电脑回合n"); while (1) { //设置随机范围[0,(row-1)] x = rand() % row; //设置随机范围[0,(col-1)] y = rand() % col; if (arr[x][y] == ' ') { arr[x][y] = '#'; break; } } } //实现判断平局 static int My_draw(char arr[ROW][COL], int row, int col) { int i = 0; for (i = 0; i < row; i++) { int j = 0; for (j = 0; j < col; j++) { if (arr[i][j] == ' ') { return 0; } } } return 1; } //实现判断输赢 char My_li(char arr[ROW][COL], int row, int col) { int i = 0; //判断三行 for (i = 0; i < row; i++) { if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][1] != ' ') { return arr[i][1]; } } //判断三列 for (i = 0; i < col; i++) { if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[1][i] != ' ') { return arr[i][1]; } } //判断对角线 if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ') { return arr[1][1]; } if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ') { return arr[1][1]; } //判断平局 if (1 == My_draw(arr, ROW, COL)) { return 'L'; } //游戏继续 return 'M'; }
(3)源文件test.c(主函数)
#include "lin.h" void menu() { //控制间距 distance(); printf(" 1.开始游戏 n"); printf(" 2.退出游戏 n"); //控制间距 distance(); } void lin() { char ret = 0; //设置棋盘规格 char arr[ROW][COL] = { 0 }; //初始化棋盘为空格 My_lin(arr,ROW,COL); //打印棋盘 My_print(arr, ROW, COL); //控制间距 distance(); while (1) { //玩家回合 My_qin(arr, ROW, COL); //控制间距 distance(); //打印棋盘 My_print(arr, ROW, COL); //控制间距 distance(); //判断输赢 ret=My_li(arr,ROW,COL); if (ret != 'M') { break; } //电脑回合 My_yan(arr, ROW, COL); //控制间距 distance(); //打印棋盘 My_print(arr, ROW, COL); //控制间距 distance(); //判断输赢 ret = My_li(arr, ROW, COL); if (ret != 'M') { break; } } if (ret == '*') { printf("恭喜你!获胜啦"); } else if (ret == '#') { printf("很遗憾,输掉了"); } else { printf("双方不相上下,平局啦"); } } void test() { int input = 0; srand((unsigned int)time(NULL)); do { //打印菜单 menu(); printf("请输入选项:"); scanf("%d", &input); //控制信息间距 distance(); switch (input) { case 1: lin(); break; case 2: printf("退出游戏n"); input = 0; break; default: printf("选择无效,请重新选择n"); break; } } while (input); } int main() { test(); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)