贪吃蛇,但是卡的要死还是开放世界(
2024-01-25 21:55:59
发布于:广东
#include <ctime>
#include <windows.h>
#include <conio.h>
#include <iostream>
#include <conio.h>
#define LevUp 5
using namespace std;
void start_game();
void init_game();
void creatSnake();
void showSnake();
void showFood();
void getKey();
void changeSnake();
void eatFood();
void upScore();
int die();
void gotoxy(int x, int y) {
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄
SetConsoleCursorPosition(hOut, pos);//两个参数分别是指定哪个窗体,具体位置
}
struct MYsnake{
int x;
int y;
};
struct Food{
int x;
int y;
};
struct MYsnake body[100];
struct MYsnake head;
struct Food food;
int length = 0;
int mapX = 50;
int mapY = 50;
int keyF;
int score;
int lev = 9;
int Flag = 1;
int main()
{
srand(time(0));
start_game();
init_game();
creatSnake();
showSnake();
food.x = (rand() % (mapX - 10))+5;
food.y = (rand() % (mapY - 10))+5;
while(true){
system("cls");
gotoxy(70, 7);
cout << "游戏控制方式:";
gotoxy(70, 9);
cout << "W键:向上 S键:向下";
gotoxy(70, 11);
cout << "A键:向左 D键:向右";
gotoxy(70, 13);
cout << "将游戏窗口最大化之后开始游戏...";
showFood();
eatFood();
getKey();
changeSnake();
showSnake();
upScore();
void upScore();
if(score % LevUp == 0 && score != 0){
if(Flag == 1){
lev++;
score = 0;
Flag = 0;}
}
if(lev >= 9){
lev = 9;
}
system("color 06");
gotoxy(70,15);
cout<<"蛇长" <<length;
gotoxy(70,17);
cout<<"等级:"<<lev;
Sleep(200 - lev*20);
if(die() == 0){
Sleep(400);
system("cls");
gotoxy(mapX/2,mapY/2);
cout<<"游戏结束";
gotoxy(mapX/2,mapY/2 + 2);
cout<<"得分:"<<length;
Sleep(400);
break;
}
}
gotoxy(55,55);
return 0;
}
void start_game()
{
system("color 0F");
gotoxy(12,13);
cout <<"★贪 吃 蛇 ★";
gotoxy(12,15);
cout<<"输入y开始游戏:";
char c;
cin>>c;
system("cls");
gotoxy(70, 7);
cout << "游戏控制方式:";
gotoxy(70, 9);
cout << "W键:向上 S键:向下";
gotoxy(70, 11);
cout << "A键:向左 D键:向右";
gotoxy(70, 13);
cout << "将游戏窗口最大化之后开始游戏...";
system("color 06");
for(int i = 0; i <= mapX; i++){
gotoxy(i,0);
cout <<"□";
gotoxy(i,mapX);
cout <<"□";
}
for(int i = 0; i <= mapY;i++){
gotoxy(0,i);
cout <<"□";
gotoxy(mapY,i);
cout <<"□";
}
}
void init_game(){
system("color 0F");
for(int j = 1; j <=mapX-1; j++){
for(int i = 1;i <= mapY-1; i++){
gotoxy(j,i);
cout <<"■";
}
}
}
void creatSnake()
{
head.x = rand()%(mapX-1)+1;
head.y = rand()%(mapY-1)+1;
}
void showSnake(){
int i;
system("color 09");
gotoxy(head.x ,head.y );
cout<<"●";
for(i = 0; i < length;i++){
system("color 04");
gotoxy(body[i].x , body[i].y );
cout<<"●";
}
}
void showFood(){
int i = 0;
if(food.x == head.x || food.y == head.y)
eatFood();
for(i = 0; i < length;i++){
if(body[i].x == food.x && body[i].y == food.y){
break;
}
}
// gotoxy(0, 80);
// cout << food.x << " " << food.y;
gotoxy(food.x ,food.y);
system("color 06");
cout<<"●";
}
void getKey(){
char c;
if(kbhit()){
c = getch();
if(c == 'w' || c == 'W'){
keyF = 1;
}
if(c == 'a' || c == 'A'){
keyF = 2;
}
if(c == 's' || c == 'S'){
keyF = 3;
}
if(c == 'd' || c == 'D'){
keyF = 4;
}
if(c == ' ' ){
keyF = 5;
}
}
}
void changeSnake()
{
struct MYsnake tmp = head;
if(keyF == 1)
{
head.y--;
}
if(keyF == 2)
{
head.x--;
}
if(keyF == 3)
{
head.y++;
}
if(keyF == 4)
{
head.x++;
}
if(keyF == 5)
{
}else{
if(length == 0){
system("color 0F");
gotoxy(tmp.x,tmp.y);
cout<<"■";
}else{
system("color 0F");
gotoxy(body[length-1].x, body[length-1].y);
cout<<"■";
}for(int i = length-1; i>0; i--){
body[i] = body[i-1];
}
body[0] = tmp;
}
}
void eatFood(){
if(food.x == head.x && food.y == head.y){
body[length].x = food.x;
body[length].y = food.y;
length++;
Flag = 1;
food.x = (rand() % (mapX - 10))+5;
food.y = (rand() % (mapY - 10))+5;
}
}
void upScore(){
score = length;
}
int die(){
if(head.x == 0 || head.y == 0 ||head.x >= mapX || head.y >= mapY){
return 0;
}
return 1;
}
别问为什么没有缩进,问就是抄的(嘿嘿)
全部评论 1
https://www.acgo.cn/discuss/7054
2024-01-25 来自 广东
0
有帮助,赞一个