跳一跳

#include <iostream> #include <time.h> #include <windows.h> #include <conio.h> using namespace std; int main() { //世界尺寸 const int ww = 100; const int wh = 40; //窗口尺寸 int cx = 0; int cy = 0; const int cw = 25; const int ch = 20; const int cs = cw * ch; int map[cs]; int herox = 0; int heroy = 38; int zl = 1; //重力 int jp = 4; //跳跃力 int curjp = 0; //跳跃判定 int herofx = 6; //英雄方向 int herost = 5; //英雄状态 //子弹 int zdx = -1; int zdy = -1; int zdfx = 6; int zdzt = -1; int zdspeed = 2; //地面 int dmx[3] = { 0, 29, 69 }; int dmy[3] = { 39, 39, 39 }; int dmw[3] = { 20, 30, 30 }; int dmh[3] = { 1, 1, 1 }; int dmlen = 3; //平台 int ptx[5] = { 5, 34, 74, 5, 13 }; int pty[5] = { 8, 17, 30, 35, 35 }; int ptw[5] = { 20, 25, 25, 2, 2 }; int pth[5] = { 2, 2, 2, 4, 4 }; int ptlen = 5; while (1) { //卷轴算法 cx = herox - cw / 2; if (cx < 0) { cx = 0; } else if (cx + cw >= ww) { cx = ww - cw; } cy = heroy - ch / 2; if (cy < 0) cy = 0; else if (cy + ch > wh) cy = wh - ch; //清空画面 for (int i = 0; i < cs; i++) { map[i] = 0; } //标记地面 for (int i = 0; i < dmlen; i++) { int x = dmx[i] - cx; int y = dmy[i] - cy; int w = dmw[i]; int h = dmh[i]; if (x >= cw || x + w < 0 || y + h < 0 || y >= ch) continue; if (x < 0) { w += x; x = 0; } if (x + w >= cw) { w -= x + w - cw; } if (y < 0) { h += y; y = 0; } if (y + h >= ch) { h -= h + y - ch; } int s = w * h; int pos = x + y * cw; for (int j = 0; j < s; j++) { map[pos] = 1; pos++; if (j % w == w - 1) { pos = pos + cw - w; } } } //放入平台 for (int i = 0; i < ptlen; i++) { int x = ptx[i] - cx; int y = pty[i] - cy; int w = ptw[i]; int h = pth[i]; if (x + w < 0 || x >= cw || y + h < 0 || y >= ch) continue; if (x < 0) { w += x; x = 0; } if (x + w > cw) { w -= x + w - cw; } if (y < 0) { h += y; y = 0; } if (y + h > ch) { h -= y + h - ch; } int pos = x + y * cw; int s = w * h; for (int j = 0; j < s; j++) { map[pos] = 1; pos++; if (j % w == w - 1) { pos = pos - w + cw; } } } //放入子弹 int pos = zdx - cx + (zdy - cy) * cw; if (pos >= 0) { if (zdfx == 4) map[pos] = 4; else map[pos] = 3; } //放入英雄 map[herox - cx + (heroy - cy)*cw] = 2; //打印 system("cls"); for (int i = 0; i < cs; i++) { if (map[i] == 0) cout << " "; else if (map[i] == 1) cout << "■"; else if (map[i] == 2) cout << "英"; else if (map[i] == 3) cout << "→"; else if (map[i] == 4) cout << "←"; if (i % cw == cw - 1) cout << endl; } //操作控制 if (GetAsyncKeyState('A')) { herox--; herofx = 4; for (int i = 0; i < ptlen; i++) { if (herox < ptx[i] || herox >= ptx[i] + ptw[i] || heroy < pty[i] || heroy >= pty[i] + pth[i]) continue; herox++; break; } } else if (GetAsyncKeyState('D')) { herox++; herofx = 6; for (int i = 0; i < ptlen; i++) { if (herox < ptx[i] || herox >= ptx[i] + ptw[i] || heroy < pty[i] || heroy >= pty[i] + pth[i]) continue; herox--; break; } } if (GetAsyncKeyState('J')) { //跳跃 if (herost == 5) { herost = 8; curjp = jp; } } if (GetAsyncKeyState('K')) { //发射 if (zdy == -1) { if (herofx == 4) { zdfx = 4; zdx = herox - 1; } else if (herofx == 6) { zdfx = 6; zdx = herox + 1; } zdy = heroy; } } //跳跃判定 if (curjp) { for (int i = 0; i < curjp; i++) { heroy--; for (int j = 0; j < ptlen; j++) { //碰撞判定 if (herox < ptx[j] || herox >= ptx[j] + ptw[j] || heroy < pty[j] || heroy >= pty[j] + pth[j]) continue; heroy++; break; } } curjp--; } else { herost = 8; heroy += zl; for (int i = 0; i < ptlen; i++) { //碰撞判定 if (heroy < pty[i] || heroy >= pty[i] + pth[i] || herox < ptx[i] || herox >= ptx[i] + ptw[i]) continue; heroy--; herost = 5; break; } if (herost == 8) { for (int i = 0; i < dmlen; i++) { //碰撞判定 if (heroy < dmy[i] || heroy >= dmy[i] + dmh[i] || herox < dmx[i] || herox >= dmx[i] + dmw[i]) continue; heroy--; herost = 5; break; } } } //子弹运动 if (zdy != -1) { int fx = 1; if (zdfx == 4) fx = -1; for (int i = 0; i < zdspeed; i++) { zdx += fx; if (zdx < cx || zdx >= cx + cw) { zdx = -1; zdy = -1; } for (int j = 0; j < ptlen; j++) { if (zdy < pty[j] || zdy >= pty[j] + pth[j] || zdx < ptx[j] || zdx >= ptx[j] + ptw[j]) continue; zdx = -1; zdy = -1; } } } } }

__EOF__

本文作者niuzeyu
本文链接https://www.cnblogs.com/niuzeyu1/p/17612492.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   niuzeyu1  阅读(88)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示