亚美体育最新网址 太阳城客户端下载-亚美体育
太阳城客户端下载
来源:网络
2024-03-07 12:59:45
C语言网络编程实战之线上五子棋(三)
#
include
#
include
#
include
#
include
// 棋盘数组
char
board[
15
]
[
15
]
;
// 棋子坐标
char
key_x
=
7
,key_y
=
7
;
// 棋子角色 黑'@' 白'$'
char
role
=
'@'
;
// 初始化棋盘
void
init_board
(
void
)
{
for
(
int
i=
0
;
i<
15
;
i++
)
{
for
(
int
j=
0
;
j<
15
;j++
)
{
board[i]
[j]
=
'*'
;
}
}
}
// 显示棋盘
void
show_board
(
void
)
{
system
(
"clear"
)
;
for
(
int
i=
0
;
i<
15
;
i++
)
{
for
(
int
j=
0
;
j<
15
;j++
)
{
printf
(
" %c"
,board[i]
[j]
)
;
}
printf
(
"\n"
)
;
}
}
// 落子
void
get_key
(
void
)
{
// 光标落子操作
printf
(
"请%c落子"
,role)
;
for
(
;
;
)
{
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
186
:
key_y>
0
&&
key_y--
;
break
;
case
185
:
key_y<
14
&&
key_y++
;
break
;
case
10
:
{
if
(
'*'
==
board[key_x]
[key_y]
)
{
board[key_x]
[key_y]
=
role;
return
;
}
break
;
}
}
}
}
// 五子连珠,判断一个小方向
int
func
(
int
i,
int
j)
{
int
cnt
=
0
;
for
(
int
x=key_x+i,y=key_y+j;x>=
0
&&
x<
15
&&
y>=
0
&&
y<
15
;x+=i,y+=j)
{
if
(board[x]
[y]
==
role)
{
cnt++
;
}
else
{
return
cnt;
}
}
return
cnt;
}
// 检查是否五子连珠
int
is_win
(
void
)
{
if
(
4
<=
func
(
-
1
,
-
1
)
+
func
(
1
,
1
)
)
return
1
;
if
(
4
<=
func
(
-
1
,
0
)
+
func
(
1
,
0
)
)
return
1
;
if
(
4
<=
func
(
0
,
-
1
)
+
func
(
0
,
1
)
)
return
1
;
if
(
4
<=
func
(
-
1
,
1
)
+
func
(
1
,
-
1
)
)
return
1
;
return
0
;
}
int
buf[
3
]
=
{
}
;
int
main
(
int
argc,
const
char
*
argv[
]
)
{
NetWork*
snw
=
init_nw
(SOCK_STREAM,
atoi
(argv[
1
]
)
,
argv[
2
]
,
false)
;
if
(snw
==
NULL
)
{
perror
(
"init_nw"
)
;
return
EXIT_FAILURE;
}
init_board
(
)
;
for
(
;
;
)
{
show_board
(
)
;
if
(buf[
0
]
)
{
printf
(
"%c胜利\n"
,
role)
;
close_nw
(snw)
;
return
0
;
}
role
=
'@'
;
get_key
(
)
;
buf[
1
]
=
key_x,
buf[
2
]
=
key_y;
if
(
is_win
(
)
)
{
show_board
(
)
;
printf
(
"%c胜利\n"
,role)
;
buf[
0
]
=
1
;
send_nw
(snw,
buf,
sizeof
(buf)
)
;
close_nw
(snw)
;
return
0
;
}
send_nw
(snw,
buf,
sizeof
(buf)
)
;
// 交换角色
role
=
'$'
;
show_board
(
)
;
printf
(
"请%c落子\n"
,
role)
;
recv_nw
(snw,
buf,
sizeof
(buf)
)
;
board[buf[
1
]
]
[buf[
2
]
]
=
'$'
;
}
}
网上五子棋游戏客户端实现
# include