[c++]代码库
#include<iostream>
#include<windows.h>
#include<time.h>
#include<conio.h>
using namespace std;
// 刷新当前屏幕
inline void Refresh(char q[][22], int grade, int gamespeed){
	system("cls");     //  清屏
	int i, j;
	cout << endl;
	for (i = 0; i<22; i++){
		cout << "\t";
		for (j = 0; j<22; j++)
			cout << q[i][j] << ' ';    //  输出贪吃蛇棋盘
		if (i == 0) cout << "\t等级为:" << grade;
		if (i == 4) cout << "\t自动前进时间";
		if (i == 6) cout << "\t间隔为:" << gamespeed << "ms";
		cout << endl;
	}
}
int main(){
	char tcsQipan[22][22];     //  贪吃蛇棋盘是一个二维数组(如22*22,包括墙壁)
	int i, j;
	for (i = 1; i <= 20; i++)
	for (j = 1; j <= 20; j++)
		tcsQipan[i][j] = ' ';     //     初始化贪吃蛇棋盘中间空白部分
	for (i = 0; i <= 21; i++)
		tcsQipan[0][i] = tcsQipan[21][i] = '-';      //初始化贪吃蛇棋盘上下墙壁
	for (i = 1; i <= 20; i++)
		tcsQipan[i][0] = tcsQipan[i][21] = '|';      //初始化贪吃蛇棋盘左右墙壁
	int tcsZuobiao[2][100];     //蛇的坐标数组
	for (i = 0; i<4; i++){
		tcsZuobiao[0][i] = 1;
		tcsZuobiao[1][i] = i + 1;
	}
	int head = 3, tail = 0;
	for (i = 1; i <= 3; i++)
		tcsQipan[1][i] = '*';    //蛇身
	tcsQipan[1][4] = '#';       //蛇头
	int x1, y1;           // 随机出米
	srand(time(0));
	do{
		x1 = rand() % 20 + 1;
		y1 = rand() % 20 + 1;
	} while (tcsQipan[x1][y1] != ' ');
	tcsQipan[x1][y1] = '*';
	cout << "\n\n\t\t贪吃蛇游戏即将开始 !" << endl;//准备开始;;
	long start;
	int grade = 1, length = 4;
	int gamespeed = 500;  //前进时间间隔
	for (i = 3; i >= 0; i--){
		start = clock();
		while (clock() - start <= 1000);
		system("cls");
		if (i>0)
			cout << "\n\n\t\t进入倒计时:" << i << endl;
		else
			Refresh(tcsQipan, grade, gamespeed);
	}
	int timeover;
	char direction = 77;  // 初始情况下,向右运动
	int x, y;
	while (1){
		timeover = 1;
		start = clock();
		while ((timeover = (clock() - start <= gamespeed)) && !_kbhit());
		//如果有键按下或时间超过自动前进时间间隔则终止循环
		if (timeover){
			_getch(); direction = _getch();
		}
		switch (direction){
		case 72: x = tcsZuobiao[0][head] - 1; y = tcsZuobiao[1][head]; break;     // 向上
		case 80: x = tcsZuobiao[0][head] + 1; y = tcsZuobiao[1][head]; break;      // 向下
		case 75: x = tcsZuobiao[0][head]; y = tcsZuobiao[1][head] - 1; break;      // 向左
		case 77: x = tcsZuobiao[0][head]; y = tcsZuobiao[1][head] + 1;           // 向右
		}
		if (!(direction == 72 || direction == 80 || direction == 75 || direction == 77)){   //  按键非方向键
			cout << "\tGame over!" << endl; return 0;
		}
		if (x == 0 || x == 21 || y == 0 || y == 21){   // 碰到墙壁
			cout << "\tGame over!" << endl; return 0;
		}
		if (tcsQipan[x][y] != ' '&&!(x == x1&&y == y1)){ //   蛇头碰到蛇身
			cout << "\tGame over!" << endl; return 0;
		}
		if (x == x1 && y == y1){      //  吃米,长度加1
			length++;
			if (length >= 8){
				length -= 8;
				grade++;
				if (gamespeed >= 200)
					gamespeed = 550 - grade * 50; // 改变自动前进时间间隔
			}
			tcsQipan[x][y] = '#';
			tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]] = '*';
			head = (head + 1) % 100;
			tcsZuobiao[0][head] = x;
			tcsZuobiao[1][head] = y;
			do
			{
				x1 = rand() % 20 + 1;
				y1 = rand() % 20 + 1;
			} while (tcsQipan[x1][y1] != ' ');
			tcsQipan[x1][y1] = '*';
			Refresh(tcsQipan, grade, gamespeed);
		}
		else{       //  不吃米
			tcsQipan[tcsZuobiao[0][tail]][tcsZuobiao[1][tail]] = ' ';
			tail = (tail + 1) % 100;
			tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]] = '*';
			head = (head + 1) % 100;
			tcsZuobiao[0][head] = x;
			tcsZuobiao[1][head] = y;
			tcsQipan[tcsZuobiao[0][head]][tcsZuobiao[1][head]] = '#';
			Refresh(tcsQipan, grade, gamespeed);
		}
	}
	system("pause");
	return 0;
}
初级程序员
by: 赶蚊子 发表于:2017-06-20 11:09:11 顶(0) | 踩(0) 回复
不错
回复评论