(作者不会玩,因为这是朋友做的)
#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;
enum BlockType { AIR=0, STONE=1, DIRT=2, WOOD=3, LEAF=4 };
const int MAP_SIZE = 20;
int world[MAP_SIZE][MAP_SIZE];
int px=1, py=1;
int inventory[5] = {0};
void generateWorld() {
srand(time(0));
for(int y=0; y<MAP_SIZE; y++) {
for(int x=0; x<MAP_SIZE; x++) {
if(y > MAP_SIZE/2) world[y][x] = STONE;
else if(y == MAP_SIZE/2) world[y][x] = DIRT;
else if(rand()%10 < 3) world[y][x] = (x%3==0) ? WOOD : LEAF;
}
}
}
void drawWorld() {
system("cls");
for(int y=0; y<MAP_SIZE; y++) {
for(int x=0; x<MAP_SIZE; x++) {
if(xpx && ypy) cout << "P ";
else switch(world[y][x]) {
case STONE: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 8); cout << "# "; break;
case DIRT: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6); cout << "@ "; break;
case WOOD: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6|FOREGROUND_INTENSITY); cout << "T "; break;
case LEAF: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 2); cout << "* "; break;
default: cout << " ";
}
}
cout << endl;
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
cout << "WASD移动 E挖掘 Q放置 1-4选择方块 I背包\n";
}
void movePlayer(int dx, int dy) {
int nx = px+dx, ny = py+dy;
if(nx>=0 && nx<MAP_SIZE && ny>=0 && ny<MAP_SIZE && world[ny][nx]==AIR) {
px = nx; py = ny;
}
}
void mineBlock() {
int bx = px, by = py+1;
if(by<MAP_SIZE && world[by][bx]!=AIR) {
inventory[world[by][bx]]++;
world[by][bx] = AIR;
}
}
void placeBlock(int blockType) {
int bx = px, by = py+1;
if(by<MAP_SIZE && world[by][bx]==AIR && inventory[blockType]>0) {
world[by][bx] = blockType;
inventory[blockType]--;
}
}
int main() {
generateWorld();
int selectedBlock = DIRT;
while(true) {
drawWorld();
if(_kbhit()) {
switch(_getch()) {
case 'w': movePlayer(0, -1); break;
case 'a': movePlayer(-1, 0); break;
case 's': movePlayer(0, 1); break;
case 'd': movePlayer(1, 0); break;
case 'e': mineBlock(); break;
case 'q': placeBlock(selectedBlock); break;
case '1': selectedBlock = STONE; break;
case '2': selectedBlock = DIRT; break;
case '3': selectedBlock = WOOD; break;
case '4': selectedBlock = LEAF; break;
case 'i':
cout << "背包: 石头:" << inventory[STONE]
<< " 泥土:" << inventory[DIRT]
<< " 木头:" << inventory[WOOD]
<< " 树叶:" << inventory[LEAF] << endl;
system("pause");
break;
}
}
}
}