linux下C语言贪吃蛇

  • 思想:

在主函数中声明一个用来存储游戏过程信息的结构体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 *
*
*功  能ÿ

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值