C语言STUDY

函数声明:
返回值类型 函数名(形参类型 变量名,类型 变量名,...);
1.一般根据数据的功能来取函数名,全部小写单词之间用
2.参数的个数,类型由于函数的功能所需要的数据决定,被调用时由调用者提供,如果不需要则写void。
3.返回值类型根据函数的结果类型决定,如果没有返回值则写void
4.如果函数的定义出现在调用之前,声明可以省略
5.函数声明时,参数的变量名可以省略
6.如果不写返回值,默认为int类型
函数定义:
返回值类型 函数名(类型 变量名,类型 变量名....)、
{
函数体;
return 数据;
}
函数的调用:
函数(数据1,数据2...);
返回值会在函数执行完成后放置在调用位置,处理方法
1、存储在变量中,长期使用。
2、立即使用,可以显示或参与运算。

输出缓冲区:
当使用printf/puts/putchar,等函数显示数据时,并不会直接显示在屏幕上,
而是先放入到缓冲区中(提高程序的运行效率),当满足一些条件时才会显示在屏幕上;
1.遇到\n
2.从输出转换到输入状态
3.程序结束
4.当缓冲区满4k
5.手动刷新 fflush(stdout);
输入缓冲区:
在终端中输入数据会先存储到输入缓冲区中没然后在根据占位解析成对应的数据,如果前一次输入的数据有残留的垃圾,会影响后续数据的输入。
1.输入字符时前一次的数据会残留一个空格或‘\n’,解决方法在之前加一个空格
2.如果输入时有若干个垃圾数据,会影响接下来的所有数据的输入
1.使用正则表达式,注意:必须确定有垃圾数据时再使用
scanf(“%[^\n”);//从缓冲区中获取数据但不存储到变量中
scanf("%*c");
2.设置缓冲区中的位置指针
stdin->_IO_read_ptr 开始位置
stdin->_IO_read_end 结束位置

stdin->_IO_read_ptr=stdin->_IO_read_end;

五子棋:
分析数据:
char board[15][15];棋盘
char key_x,key_y;接受棋子坐标。
char role;记录角色。
业务逻辑:
1、初始化棋盘,所有位置赋值为“*”;
while(turn)
{
2、清理屏幕,显示棋盘。
3、请输入棋盘的坐标
检查坐标是否合法、是否已有棋子
4、检查是否形成五子
break;
5、切换角色
}
代码:

include <stdio.h>

include <stdlib.h>

include <stdbool.h>

include <getch.h>

char board[15][15];
char key_x=7,key_y=7;
char role = '@';

// 棋盘初始化
void init_board(void);
// 显示棋盘
void show_board(void);
// 落子
void get_key(void);
// 检查是否有五子
bool check_key(void);

int main()
{
init_board();
while(true)
{
show_board();
get_key();
// 检查五子
if(check_key())
{
show_board();
printf("恭喜%c胜利,游戏结束\n",role);
break;
}
// 角色切换
role = role=='@'?'#':'@';
}
}

// 棋盘初始化
void init_board(void)
{
for(int x=0; x<15; x++)
{
for(int y=0; y<15; y++)
{
board[x][y] = '*';
}
}
}

// 显示棋盘
void show_board(void)
{
system("clear");
for(int x=0; x<15; x++)
{
for(int y=0; y<15; y++)
{
printf(" %c",board[x][y]);
}
printf("\n");
}
}

// 落子
void get_key(void)
{
/
printf("请%c落子,输入棋子坐标:",role);
scanf("%hhd%hhd",&key_x,&key_y);
if(key_x < 15 && key_x >= 0 && key_y < 15 && key_x >= 0 && '
' == board[key_x][key_y])
{
board[key_x][key_y] = role;
}
/
printf(" -----------请%c落子-----------\n",role);
while(true)
{
// 设置光标的位置
printf("\33[%hhd;%hhdH",key_x+1,(key_y+1)
2);
switch(getch())
{
case 183:key_x > 0 && key_x--; break;
case 184:key_x <14 && key_x++; break;
case 185:key_y <14 && key_y++; break;
case 186:key_y > 0 && key_y--; break;
case 10:if('*' == board[key_x][key_y])
{
board[key_x][key_y] = role;
return;
}
}
}
}

// 检查是否有五子
bool check_key(void)
{
// 用于记录相同棋子的数量
int count = 0;
// 向左上查找
for(int x=key_x-1,y=key_y-1; x>=0&&y>=0; x--,y--)
{
if(board[x][y] != board[key_x][key_y])
{
break;
}
count++;
}
// 向右下查找
for(int x=key_x+1,y=key_y+1; x<15&&y<15; x++,y++)
{
if(board[x][y] != board[key_x][key_y])
{
break;
}
count++;
}
if(count >= 4)
{
return true;
}

return false;

}
1684523-20190510165935051-1254471752.png

转载于:https://www.cnblogs.com/zhangjinguang/p/10845463.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值