在主函数中声明一个用来存储游戏过程信息的结构体info和一个snake的链表,新创建一个线程_get_ctl来不断的读取用户的控制信息(键盘输入),用共享内存方式共享info结构体,把共享内存的标示符传递给新创建的线程来实现数据的同步。主函数完成初始化后不断的读取info结构体的信息、作出相应的数据处理。
common.h
#ifndef __snake_COMMON_H__
#define __snake_COMMON_H__
#include <time.h>
#include <ncurses.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
#include <sys/shm.h>
#include <sys/types.h>
typedef struct snake{
int snake_x;
int snake_y;
struct snake *next;
}snake;
typedef struct infomation{
char usr_name[13]; //usr name
int usr_score; //usr score
int level;
int time;
int food_x;
int food_y;
int move_x;
int move_y;
char ctl;
//int snake_shmid;
bool stop;
bool end;
WINDOW *win_main; //主窗口
WINDOW *win_info; //副窗口
int win_main_x;
int win_main_y;
}info;
/********************
创建一个节点
********************/
void _create_nood(struct snake *head,int x,int y);
/**********************
创建蛇的初始位置
**********************/
snake * _creat_snake(info *info_p);
/***********************
吃掉一个食物
***********************/
void _snake_eat(info *info_p,struct snake* head);
/*************************
向前移动一个单位
***************************/
void _snake_move(struct snake *head,info *info_p);
/***************************
判断蛇是否和food相遇
****************************/
int _food_snake(info* info_p,snake *snake);
/***************************
创建一个food节点
**************************/
void _creat_food(info *info_p,snake *snake);
/************************
snake结构体的初始化(蛇的初始位置)
**********************/
void _snake_init(info *info_p,snake **snake);
/******************************
把蛇在屏幕上显示出来
********************************/
void _snake_show(info *info_p,snake *snake);
/*****************************
显示游戏得分和等级
********************************/
void _show_score(info *info_p);
/*********************************
判断游戏是否结束
************************************/
void _snake_test(info *info_p,snake *snake);
/*************************************
游戏的运行过程
**************************************/
void _snake_run(info *info_p,snake *snake);
/**************************************
获取相应的游戏控制状态
***************************************/
void _snake_ctl(info *info_p);
#endif
main.c<span style="font-size:12px;">#include "common.h"
/******************************************************************************
*函数名:_get_ctl()
*
*参 数: void *q :共享内存的标示符
*
*返回值:void *
*
*功 能ÿ