用C语言 怎么做出这个来
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C语言 怎么做出这个来相关的知识,希望对你有一定的参考价值。
用MFC,一边学MFC,一边做,小半天功夫指定能写出来。//main.cpp
#include <windows.h>
这些按钮,输入框其实就是调用一些windows api完成的。
给你来段实际的代码:
/* The class is registered, let's create the program*/
//WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX 初始一个不能缩放,不能最大化的窗口
//WS_OVERLAPPEDWINDOW 默认的窗口,可以自由缩放,最大化,最小化。
hwnd_root = CreateWindowEx (
0, /* Extended possibilites for variation */
szClassName, /* Classname */
"Web消息通知", /* Title Text */
WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX, /* default window */
CW_USEDEFAULT, /* Windows decides the position */
CW_USEDEFAULT, /* where the window ends up on the screen */
494, /* The programs width */
279, /* and height in pixels */
HWND_DESKTOP, /* The window is a child-window to desktop */
NULL, /* No menu */
hThisInstance, /* Program Instance handler */
NULL /* No Window Creation data */
);
/按钮,单选,复选 - button , dwStyle: BS_AUTORADIOBUTTON, BS_AUTOCHECKBOX
//单行文本框,多行文本框 - edit, dwStyle: ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE
//标签 - static
//按钮 - CreateWindow
/*
//CreatWindow方式
HWND button = CreateWindow("button", "你好",
WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX ,
110, // xpos
104, // ypos
121, //width
21, //height
hwnd_root, (HMENU)1, hThisInstance, NULL ) ;
*/
hwnd_lURL = CreateWindowEx(0,"static", "Web消息源网址(Notify URL),一行一个网址,最多支持10个网址:",
WS_CHILD | WS_VISIBLE,
13, // xpos
13, // ypos
443, //width
21, //height
hwnd_root, (HMENU)idl_url, hThisInstance, NULL ) ;
//文本框 - 3D - CreateWindowEx(WS_EX_CLIENTEDGE
hwnd_tURL = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", "",
WS_BORDER | WS_CHILD | WS_VISIBLE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE | WS_VSCROLL,
12, // xpos
33, // ypos
463, //width
166, //height
hwnd_root, (HMENU)idt_url, hThisInstance, NULL); 参考技术A 这是用MFC做的,前台的界面很好做的,直接拖出来就行,和VB很相像,但是后台的数据处理就比较麻烦了 参考技术B 你用java也不好用c啊 参考技术C 你应该用vb的。 参考技术D 这个应该用windows编程吧! 第5个回答 2012-03-14 用MFC,很容易。
用C语言实现三子棋游戏
目录
实现一个三子棋小游戏
下面是实现步骤:
总共有需要三个文件
第一,test.c
我们要在这个文件里面实现游戏的主体流程
第二,game.c
在这个文件里我们可以实现各个游戏函数的分装
第三,game.h
在这个文件里我们实现的是各个函数的声明
test.c
1首先要有一个菜单
让玩家可以做出选择
2接着对玩家做出的不同选择进行实现
选1就是开始游戏,所以我们进入到game函数里就好了
选0就是退出游戏,
其他选择的话就是选择错误,重新选择
这个我们可以用switch语句来实现
这里我们要先用的是do,while循环,条件里放入我们要输入的数
这样的话如果输入的数为0,即为假,正好会跳出循环,后面接上return 0的话程序就结束了
所以我们先把以上所描述的功能写出来
#include<stdio.h>
#include"game.h"
void menu()
{
printf("***********\\n");
printf("***1play***\\n");
printf("***0exit***\\n");
printf("***********\\n");
}
int main()
{
menu();
int input = 0;
do
{
printf("请选择\\n");
scanf("%d", &input);
switch(input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\\n");
break;
default:
printf("选择错误,请重新选择\\n");
}
}while(input);
return 0;
}
3实现游戏函数的各个功能
我们要做的是三子棋,应该先有一个棋盘
所以我们就可以用二维数组来创建这样一个 3 * 3的棋盘
鉴于以后可能会想要不同行和列的棋盘
所以我们可以定义宏来表示数组的行和列,以后想要修改行数和列数也很方便
创建棋盘之后,我们要将棋盘里的元素进行初始化
接着还要打印出来呈现给玩家
然后就是下棋的过程,因为我们得不断下到一方赢或者棋盘满
所以我们可以用while循环来实现
接着就是
玩家下棋,展示棋盘,判断输赢
电脑下棋,展示棋盘,判断输赢
......
我们可以把以上功能表达出来
void game()
{
char board[ROW][COL];//宏的定义放在game.h里面
char ret = 0;//我们用ret这个变量去接收判断输赢的函数所返回的值
IntBoard(board, ROW, COL);//这些具体的函数都会分装到game.c上面
DisplayBoard(board, ROW, COL);
//创建和展示棋盘之后,就是不断 下棋,展示,判断的过程了
while(1)
{
PlayerMove(board, ROW, COL);
DisplayBoard(board, ROW, COL);
ret = IsWin(board, ROW, COL);
if(ret != 'C')//也就是指要么一方赢,要么棋盘满,就应该跳出循环,不再继续下棋了
break;
//这两步的区别就只是第一行而已
ComputerMove(board, ROW, COL);
DisplayBoard(board, ROW, COL);
ret = IsWin(board, ROW, COL);
if(ret != 'C')
break;
}
if(ret == '*')
printf("玩家赢\\n");
else if(ret == '#')
printf("电脑赢\\n");
else
printf("平局\\n");
}
game函数放在menu函数后面就好了
game.c
所以我们所需要分装到game.c里的函数有:
初始化棋盘,打印棋盘,玩家下棋,电脑下棋,判断输赢
那么接下来我们就在game.c里实现上述函数的功能
初识化棋盘
我们利用for循环把里面的元素都初始化为空格
#include"game.h"
void IntBoard(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");//每列打印完打印分割行
if(i < row - 1)
{
for(j = 0; j < col; j++)
{
printf("---");
if(j < col - 1)
printf("|");
}
}
printf("\\n");//棋盘全都打印好之后打印分割行
}
}
玩家下棋
这里的实现思路是:
-
判断输入的位置有无越界
-
有则提示,没有则判断有无棋子
-
有则提示,没有则将该位置放入元素*
(因为玩家可能要连续输入几次,所以我们要用到while循环)
void PlayerMove(char board[ROW][COL], int row, int col)
{
int x;
int y;
//玩家要输入的行和列
while (1)
{
printf("请输入坐标\\n");
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");
}
电脑下棋
这里的实现思路是:
-
生成随机数(这个数值不能越界)
-
将该位置放入元素#,这里不需要判断,因为本身就不需要输入
void ComputerMove(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
srand((unsigned int)time(NULL));
printf("电脑走\\n");
while(1)
{
x = rand() % row;//生成随机数,这里就需要用到时间戳了,我们还要做test.c里面包含一个<time.h>
y = rand() % col;
if(board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}
判断输赢
这里还要分为棋盘是否满子和一方赢
是否满子
实现思路:
这个比较简单,我们只要依次查看棋盘,若有一个元素为空格,即为满
然后注意一下返回值就好了
int IsFull(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;
}
哪一方赢
实现思路:
根据规则,我们要判断是否有三个相同的棋子连成直线
所以,每一行,每一列判断一次,然后对角线再判断两次就好了
使用for循环和if语句来实现
char IsWin(char board[ROW][COL], int row, int col)
{
int i = 0;
int j = 0;
for(i = 0; i < row; i++)//先判断行
{
if(board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ')
return board[i][0];
}
for(j = 0; j < col; j++)//再判断列
{
if(board[0][i] == board[1][i] && board[1][i] == board[2][i] && board != ' ')
return board[0][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];
//然后我们再这里直接调用IsFull函数,就不用在game函数里调用了,而且返回值都能统一管理
if(IsFull(board, row, col))
{
return 'Q';
}
return 'C';
}
到这里我们的game.c文件的任务就完成了
game.h
然后我们还需要一个game.h文件来对函数进行声明
#define _CRT_SECURE_NO_WARNINGS
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 3
#define COL 3
void IntBoard(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);
int IsFull(char board[ROW][COL], int row, int col);
好了,到了这里我们的三子棋小游戏就完成了!快去试试吧!
点关注,不迷路~
以上是关于用C语言 怎么做出这个来的主要内容,如果未能解决你的问题,请参考以下文章