初级贪吃蛇

来源:互联网 发布:淘宝在线布局工具 编辑:程序博客网 时间:2024/06/05 11:37

1.实现蛇的移动。

#include <stdio.h> #include <stdlib.h>#include <time.h>#define SNAKE_MAX_LENGTH 20#define SNAKE_HEAD 'H'#define SNAKE_BODY 'X'#define VLANK_CELL ' '#define SNAKE_FOOD '$'#define WALL_SELL '*'char map[12][12] = {  "************",  "*XXXXH     *",  "*          *",  "*          *",  "*          *",  "*          *",  "*          *",  "*          *",  "*          *",  "*          *",  "************",};int snakeX[SNAKE_MAX_LENGTH]={1,2,3,4,5};int snakeY[SNAKE_MAX_LENGTH]={1,1,1,1,1};int snakeLength = 5;int gameRunning=1;void snakeMove(int snakeX[], int snakeY[]){int headX= snakeX[snakeLength-1];    int headY= snakeY[snakeLength-1];char control=_getch();    switch (control) {    case 'w':        snakeY[snakeLength-1]--;    break;            case 'a':    snakeX[snakeLength-1]--;        break;    case 's':            snakeY[snakeLength-1]++;        break;    case 'd':        snakeX[snakeLength-1]++;    break;        default:        return;    }    if (map[snakeY[snakeLength-1]][snakeX[snakeLength-1]] != VLANK_CELL && map[snakeY[snakeLength-1]][snakeX[snakeLength-1]] != SNAKE_FOOD) {gameOver();}map[snakeY[snakeLength-1]][snakeX[snakeLength-1]]='H';map[headY][headX]='X';map[snakeY[0]][snakeX[0]]=' ';int i;for(i=0;i<snakeLength-1;i++){    snakeY[i]=snakeY[i+1];    snakeX[i]=snakeX[i+1];}snakeY[snakeLength-2]=headY;snakeX[snakeLength-2]=headX;output();} void put_money(void);void output(){    system("cls");  int i = 0 ;  for (i = 0; i < 12; ++i) {int k;for(k = 0;k<12;++k){    printf("%c", map[i][k]);  }  printf("\n");

}
}

void gameOver() {printf("GAME OVER!!\n");gameRunning = 0;}int main(){output();while (gameRunning) {    snakeMove(snakeX,snakeY);}printf("GAME OVER!!\n");}

这样就基本实现了蛇的移动。

2.吃食物和增长蛇身。

#include <stdio.h>#include <stdlib.h>#include <time.h>char BLANK_CHAR      = ' ';char WALL_CHAR       = '*';char SNAKE_HEAD_CHAR = 'H';char SNAKE_BODY_CHAR = 'X';char FOOD_CHAR       = '$';char map[12][13] = {  "************",  "*          *",  "*          *","*          *","*          *",  "*          *",  "*          *",  "*          *",  "*          *",  "*          *",  "*          *",  "************",};int snakeHeadX = 1, snakeHeadY = 1;int snakeBodyX[100] = {0}, snakeBodyY[100] = {0};int snakeBodyLen = 0;int snakeTailIndex = -1;int willBeLonger = 0;int foodX = 0, foodY = 0;int gameRunning = 1;void printMap() {  system("cls");  int i = 0 ;  for (i = 0; i < 12; ++i) {    printf("%s\n", map[i]);      }}void spawnFood() {  // Random food position          foodX = rand() % 10 + 1;  foodY = rand() % 10 + 1;  while (map[foodX][foodY] != BLANK_CHAR) {    foodX = rand() % 10 + 1;foodY = rand() % 10 + 1;  }      map[foodX][foodY] = FOOD_CHAR;}void initGame() {  // Initialize snake      snakeHeadX = snakeHeadY = 1;  map[snakeHeadX][snakeHeadY] = SNAKE_HEAD_CHAR;  snakeBodyLen = 0;      gameRunning = 1;  snakeTailIndex = -1;  willBeLonger = 0;  // Initialize food  spawnFood();  // Initialize game  gameRunning = 1;  printMap();}void gameOver() {system("cls");printf("GAME OVER!!\n");gameRunning = 0;}void snakeMove(char control) {      map[snakeHeadX][snakeHeadY] = BLANK_CHAR;  // record the previous snake head position  int prevSnakeHeadX = snakeHeadX;  int prevSnakeHeadY = snakeHeadY;  switch (control) {   case 'w':snakeHeadX--;break;   case 'a':snakeHeadY--;break;   case 's':snakeHeadX++;break;   case 'd':snakeHeadY++;break;   default:return;  }          if (map[snakeHeadX][snakeHeadY] != BLANK_CHAR && map[snakeHeadX][snakeHeadY] != FOOD_CHAR) {    // DIEDgameOver();  }map[snakeHeadX][snakeHeadY] = SNAKE_HEAD_CHAR;  int moved = 0;  // If willBeLonger, then make it longer  if (willBeLonger) {willBeLonger = 0;moved = 1;// make spaceint i;for (i = snakeBodyLen - 1; i > snakeTailIndex; --i) {  snakeBodyX[i + 1] = snakeBodyX[i];  snakeBodyY[i + 1] = snakeBodyY[i];}snakeBodyX[snakeTailIndex + 1] = prevSnakeHeadX;snakeBodyY[snakeTailIndex + 1] = prevSnakeHeadY;if (snakeTailIndex < 0) snakeTailIndex = 0;map[prevSnakeHeadX][prevSnakeHeadY] = SNAKE_BODY_CHAR;snakeBodyLen++;  }  // Check if ate food  if (snakeHeadX == foodX && snakeHeadY == foodY) {willBeLonger = 1;spawnFood();  }  // Head has already moved, **Move the body**      // if "no body" here or added tail just now, then it needn't move  if (snakeBodyLen <= 0 || moved) return;  map[snakeBodyX[snakeTailIndex]][snakeBodyY[snakeTailIndex]] = BLANK_CHAR;  snakeBodyX[snakeTailIndex] = prevSnakeHeadX;  snakeBodyY[snakeTailIndex] = prevSnakeHeadY;  map[prevSnakeHeadX][prevSnakeHeadY] = SNAKE_BODY_CHAR;  // Move tail index  snakeTailIndex = (snakeTailIndex - 1 + snakeBodyLen) % snakeBodyLen;}int main() {  // Initialize random seed  srand(time(NULL));  initGame();  char control = 0;  while (gameRunning) {control=_getch(); // " %c": the space is used to skip blank character, like '\n'snakeMove(control);printMap();}

这样就完成了基本的通过wasd来控制的贪吃蛇游戏了。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 橄榄菜生产厂家 橄榄菜厂家 橄榄菜多少钱一瓶 拌橄榄菜 新鲜橄榄菜 批发橄榄菜 橄榄菜豆角 橄榄菜品牌 橄榄菜的禁忌 橄榄菜什么牌子好 豇豆橄榄菜 潮盛橄榄菜 橄榄菜好么 玉蕾橄榄菜 橄榄菜豇豆 新鲜橄榄菜怎么吃 橄榄菜代理 橄榄菜扣肉 橄榄菜干菜 瓶装橄榄菜 橄榄菜芸豆 橄榄菜蒸鱼 橄榄菜 品牌 橄榄菜怎么炒 蓬盛橄榄菜多少钱 苦瓜橄榄菜 鲜橄榄菜 孕妇 橄榄菜 橄榄菜那个牌子的好 橄榄菜 瓶装 橄榄菜的品牌 橄榄菜罐头 橄榄菜孕妇可以吃吗 如何做橄榄菜 香菇橄榄菜 橄榄菜过敏 玉蕾橄榄菜价格 如何拌橄榄菜 橄榄菜怎么做好吃 罐装橄榄菜 橄榄菜烧鱼