纯c语言版的贪吃蛇,linux终端运行
来源:互联网 发布:剑三大师脸型数据 编辑:程序博客网 时间:2024/05/22 17:28
play.h:
#ifndef PLAY_H__
#define PLAY_H__
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <pthread.h>
#define MAP_ROW 30
#define MAP_COL 50
#define SNAKE_TOU '#'
#define SNAKE_SHEN '+'
#define SNAKE_WEI ' '
#define SNAKE_FOOD '@'
typedef enum direction{
UP = 1, DOWN, LEFT, RIGHT
}Direction;
typedef struct Snake{
int row;
int col;
}Snake;
void show();
void init_map();
void move();
void food();
void* turn(void*);
#endif
play.c:
#include "play.h"
Snake snake_head;
Snake snake[100];
Snake snake_food;
char map[MAP_ROW][MAP_COL];
Direction snake_dir;
int snake_length = 0;
pthread_mutex_t snake_dir_mutex = PTHREAD_MUTEX_INITIALIZER;
void init_map(){
int row, col;
for(row = 0;row < MAP_ROW;row++){
for(col = 0;col < MAP_COL;col++){
if(0 == row || 0 == col || MAP_COL-1 == col || MAP_ROW-1 == row){
map[row][col] = '#';
}
else{
map[row][col] = ' ';
}
}
}
map[snake_food.row][snake_food.col] = SNAKE_FOOD;
int loop;
for(loop = 0;loop < snake_length;loop++){
if(loop == 0){
map[snake[loop].row][snake[loop].col] = SNAKE_TOU;
}
else{
map[snake[loop].row][snake[loop].col] = SNAKE_SHEN;
}
}
}
void init(){
srand(time(NULL));
Snake *head = (Snake *)malloc(sizeof(Snake));
snake[snake_length].row = rand() % (MAP_ROW - 2) + 1;
snake[snake_length].col = rand() % (MAP_COL - 2) + 1;
snake_head = snake[snake_length];
snake_length++;
snake_dir = rand() % 4 + 1;
food();
while(1){
system("clear");
init_map();
show();
usleep(400000);
move();
}
}
void show(){
int row, col;
for(row = 0;row < MAP_ROW;row++){
for(col = 0;col < MAP_COL;col++){
printf("%2c", map[row][col]);
}
printf("\n");
}
printf("当前移动方向:");
switch(snake_dir){
case UP:
printf("上\n");
break;
case DOWN:
printf("下\n");
break;
case LEFT:
printf("左\n");
break;
case RIGHT:
printf("右\n");
break;
}
printf("请输入移动方向(w.上 s.下 a.左 d.右):\n");
}
void move(){
Snake snake_move;
snake_move = snake_head;
switch(snake_dir){
case UP:
snake_move.row--;
break;
case DOWN:
snake_move.row++;
break;
case LEFT:
snake_move.col--;
break;
case RIGHT:
snake_move.col++;
break;
}
int loop;
if(snake_move.row < 0 || snake_move.col < 0 || snake_move.row > MAP_ROW - 1 || snake_move.col > MAP_COL - 1){
system("clear");
show();
pthread_mutex_destroy(&snake_dir_mutex);
printf("GAME OVER!\n");
exit(0);
}
for(loop = 0;loop < snake_length - 1;loop++){
if(snake_move.row == snake[loop].row && snake_move.col == snake[loop].col){
system("clear");
show();
pthread_mutex_destroy(&snake_dir_mutex);
printf("GAME OVER!\n");
exit(0);
}
}
if(snake_move.row == snake_food.row && snake_move.col == snake_food.col)
{
snake_length++;
food();
}
for(loop = snake_length - 1;loop > 0;loop--){
snake[loop] = snake[loop - 1];
}
snake[0] = snake_move;
snake_head = snake_move;
}
void* turn(void* p){
char c_dir;
while(1){
scanf("%c", &c_dir);
getchar();
pthread_mutex_lock(&snake_dir_mutex);
if('a' <= c_dir && c_dir <= 'z'){
c_dir = c_dir - 'a' + 'A';
}
switch(c_dir){
case 'W':
if(snake_dir == DOWN){
break;
}
snake_dir = UP;
break;
case 'S':
if(snake_dir == UP){
break;
}
snake_dir = DOWN;
break;
case 'A':
if(snake_dir == RIGHT){
break;
}
snake_dir = LEFT;
break;
case 'D':
if(snake_dir == LEFT){
break;
}
snake_dir = RIGHT;
break;
}
pthread_mutex_unlock(&snake_dir_mutex);
}
}
void food(){
int flag = 1;
while(flag){
flag = 0;
snake_food.row = rand() % (MAP_ROW - 2) + 1;
snake_food.col = rand() % (MAP_COL - 2) + 1;
int loop;
for(loop = 0;loop < snake_length - 1;loop++){
if(snake_food.row == snake[loop].row && snake_food.col == snake[loop].col){
flag = 1;
}
}
}
}
int main(){
pthread_t id;
pthread_create(&id, NULL, turn, NULL);
init();
}
- 纯c语言版的贪吃蛇,linux终端运行
- c语言版五指棋,linux终端运行
- 贪吃蛇(C语言版)
- c语言版贪吃蛇
- c语言版员工管理系统,linux终端运行
- C语言版贪吃蛇游戏
- c语言版贪吃蛇《课程设计》
- 第一次独立完成的小游戏(贪吃蛇c语言版)
- 教你实现简单的贪吃蛇------C语言版
- C语言版贪吃蛇:第一部分
- C语言版贪吃蛇:第二部分
- C语言版贪吃蛇:第三部分
- C语言版贪吃蛇:第四部分
- 贪吃蛇纯c代码
- 纯C语言写的贪吃蛇源码
- 【python学习笔记】写一个linux终端的贪吃蛇
- 纯C语言 贪吃蛇 工程实践
- 纯C语言贪吃蛇游戏
- Apache服务器的配置(一)
- 多媒体编程——声音播放(2)
- 人生真的是一场马拉松吗?
- HDU1372:Knight Moves(BFS)
-  |"|&|<|>等html字符转义
- 纯c语言版的贪吃蛇,linux终端运行
- 程序是怎么在计算机中运行的--运行时程序的内存结构
- 设计模式之状态模式
- nginx源码分析--模块分类
- Silerlight调用WCF、Web Service、Wcf Ria Service跨域的问题
- OCP-1Z0-051 第169题 使用子查询DELETE数据
- OCP 1Z0 051 117
- Bellman-Ford算法的改进:SPFA算法
- 关于父类没有缺省的构造函数时,子类如何建立构造函数