众所周知,P1000是一道水得不能再水的水题,但是在博猪我刚进入洛谷是时,对这种题无从下手,今天就给广大计算机人初学者安利一波P1000超级玛丽游戏的思维简化版,大家记得【点赞·收藏·关注·打赏】
首先我们看这道题的题目“超级玛丽游戏”,本题是洛谷的试机题目,可以帮助了解洛谷的使用,有没有被吓到,第一道题就让我们写个游戏出来。
结果点进去一看,顿时觉得这道题是在开一个冷玩笑,看背景貌似好简单耶,看我的厉害。接着往下看输入输出,一脸蒙圈。什么鬼,连个样例都没有,仔细一看描述,顿时豁然开朗。。好了,让我们分析一下题目。
题目传送门:超级玛丽游戏 - 洛谷
废话不多说,开整。
此题跟超级玛丽并没有半毛钱关系,只是一道考你输出的题目,其实分部完成是我认为最方便理解与AC的方法,整道题我们只分四个方块来解决他:1.超级玛丽 2.脚下三个泥土块 3.两个金币 4.金币下的管子,依次敲完即可
分步解决就很奈斯,上代码
#include <bits/stdc++.h>
using namespace std;
int p[100][100];
int last[100];
int n = 22, m = 62;
void draw(int x1, int y1, int x2, int y2, char ch = '#')
{for(int i = x1; i <= x2; i++)for(int j = y1; j <= y2; j++)p[i][j] = ch;
}
void draw(int x1, int y1, char ch = '#')
{draw(x1, y1, x1, y1, ch);
}
void drawland(int x, int y)
{draw(x, y, x+8, y+13);for(int i = x+1; i < x+8; i+=2)draw(i, y+1, i, y+12, '.');draw(x+1, y+4); draw(x+1, y+11);draw(x+3, y+3); draw(x+3, y+8);draw(x+5, y+6); draw(x+7, y+2);draw(x+7, y+5); draw(x+7, y+10);
}
// 以[x, y]为左上角绘制小岛
void drawisland(int x, int y)
{draw(x, y, x+3, y+19);draw(x+1, y+1, x+2, y+18, '-');draw(x+4, y+4, x+8, y+15);draw(x+4, y+5, x+7, y+14, '-');
}
// 以[x, y]为左上角绘制金币
void drawcoin(int x, int y)
{draw(x, y, x+5, y+4);draw(x+1, y+1, x+4, y+3, '.');draw(x+2, y+2, x+3, y+2);draw(x, y, ' '); draw(x+5, y, ' ');draw(x, y+4, ' '); draw(x+5, y+4, ' ');
}
// 以[x, y]为左上角绘制马里奥
void drawman(int x, int y)
{draw(x, y+5, x, y+12, '*'); x++;draw(x, y+4, x, y+15, '*'); x++;draw(x, y+4, x, y+7); draw(x, y+8, x, y+13, '.'); draw(x, y+12); x++;draw(x, y+2, x, y+14); draw(x, y+3, x, y+4, '.');draw(x, y+8, x, y+12, '.'); draw(x, y+15, x, y+18, '.'); x++;draw(x, y+2, x, y+17); draw(x, y+5, x, y+11, '.'); x++;draw(x, y+5, x, y+15, '.'); x++;draw(x, y+4, x, y+13); draw(x, y+6, '*'); x++;draw(x, y+1, x, y+17); draw(x, y+5, x, y+11, '*'); x++;draw(x, y, x+2, y+20, '.'); draw(x, y+4, x+2, y+16, '*');draw(x, y+3); draw(x, y+14, x+1, y+16); draw(x+1, y+16, '.');draw(x+2, y+8, x+2, y+11, ' '); draw(x, y+7, '.'); draw(x, y+12, '.');draw(x+3, y, x+4, y+19); draw(x+3, y+6, x+4, y+13, ' ');draw(x+3, y, x+3, y+1, ' '); draw(x+3, y+18, x+3, y+19, ' ');
}
void printscreen(){for(int i = 1; i <= n; i++)
{last[i] = m;while(p[i][last[i]] == ' ')last[i]--;}for(int i = 1; i <= n; i++,puts(""))for(int j = 1; j <= last[i]; j++)putchar(p[i][j]);
}
int main()
{for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)p[i][j] = ' ';// 绘制超级玛丽drawman(1, 12);// 绘制脚下的三个泥土块drawland(14, 1); drawland(14, 15); drawland(14, 29);// 绘制金币下面的那个管子drawisland(14, 43);// 绘制两个金币drawcoin(5, 43); drawcoin(5, 58);// 输出printscreen();return 0;
}
这道题的讲解就到这里吧,有什么
最后感谢教我这段代码的大神老师~
***结束撒花***