python超级玛丽最简单代码
超级玛丽增强版源代码

{
public:
MYANIOBJ();
~MYANIOBJ();
//init list
void InitAniList(int *pw,int *ph,int inum,int ismask);
void InitAniList(int style,int a,int b);
HDC hdcdest;
HDC hdcsrc;
//当前位置
int xpos;
int ypos;
int iStartAni;
};
class MYBKSKY:public MYBITMAP
{
public:
MYBKSKY();
~MYBKSKY();
//show
void DrawRoll(); //循环补空
jnum=col;
hBm=LoadBitmap(hInstance,MAKEINTRESOURCE(iResource));
GetObject(hBm,sizeof(BITMAP),&bm);
width=bm.bmWidth/inum;
height=bm.bmHeight/jnum;
}
void MYBITMAP::SetDevice(HDC hdest,HDC hsrc,int wwin,int hwin)
~MYANIMAGIC();
//init list
void InitAniList(int *pw,int *ph,int inum);
void SetDevice(HDC hdest,HDC hsrc,HDC htemp);
//show
void DrawItem(int x,int y,int id,int iframe);
python索菲亚代码

python索菲亚代码1. Python索菲亚代码是什么?- Python索菲亚代码是一种用于生成漂亮的图形界面的Python 库。
- 它可以让开发者轻松地创建各种GUI应用程序,包括桌面应用、游戏、数据可视化等。
- Python索菲亚代码提供了丰富的控件和布局选项,使得开发者可以快速地构建出复杂的界面。
2. 如何安装Python索菲亚代码?- 首先需要安装Python解释器,可以从官网下载安装包进行安装。
- 接着需要安装Python索菲亚代码库,可以使用pip命令进行安装:pip install PySimpleGUI。
- 安装完成后,就可以在Python程序中导入PySimpleGUI库并开始使用了。
3. 如何使用Python索菲亚代码创建GUI应用程序?- 首先需要定义应用程序的界面布局,可以使用PySimpleGUI提供的各种控件进行布局,比如按钮、标签、文本框等。
- 接着需要编写事件处理函数,处理用户在界面上的各种操作,比如点击按钮、输入文本等。
- 最后需要将界面布局和事件处理函数进行绑定,并启动应用程序的主循环,等待用户的操作。
4. Python索菲亚代码的优点是什么?- 简单易用:Python索菲亚代码提供了简洁的API,使得开发者可以快速地创建复杂的GUI应用程序。
- 跨平台性:Python索菲亚代码可以运行在Windows、Linux、Mac等多个操作系统上。
- 社区支持:Python索菲亚代码拥有庞大的开发者社区,可以提供丰富的文档、教程和支持。
- 免费开源:Python索菲亚代码是开源的,可以免费使用和修改。
5. Python索菲亚代码的应用场景有哪些?- 桌面应用程序:Python索菲亚代码可以用于创建各种桌面应用程序,比如文本编辑器、音乐播放器等。
- 数据可视化:Python索菲亚代码可以用于创建各种数据可视化应用程序,比如图表、地图等。
- 游戏开发:Python索菲亚代码可以用于创建各种游戏,比如棋类游戏、射击游戏等。
超级玛丽增强版源代码(1)

int jumpx;//方向int idirec;//动画int iAniBegin;int iparam1;int iAniStyle;};#endif// bitmaptool.cpp// Finishing #include "stdafx.h"#include "bitmaptool.h"#include "gamemap.h"extern GAMEMAP gamemap;extern FILEREPORT f1;MYBITMAP::MYBITMAP(){}MYBITMAP::~MYBITMAP(){DeleteObject(hBm);}void MYBITMAP::Init(HINSTANCE hInstance,int iResource,int row,int col){BITMAP bm;inum=row;jnum=col;hBm=LoadBitmap(hInstance,MAKEINTRESOURCE(iResour ce));GetObject(hBm,sizeof(BITMAP),&bm);width=bm.bmWidth/inum;height=bm.bmHeight/jnum;}void MYBITMAP::SetDevice(HDC hdest,HDC hsrc,int wwin,int hwin){hdcdest=hdest;hdcsrc=hsrc;screenwidth=wwin;screenheight=hwin;}void MYBITMAP::Show(int x,int y){xpos=x;ypos=y;SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos,width,height,hdcsrc,0,0,SRCCOPY); }void MYBITMAP::ShowCenter(int y){xpos=(screenwidth-width)/2;ypos=y;SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos,width,height,hdcsrc,0,0,SRCCOPY); }void MYBITMAP::ShowLoop(int left,int top,int right,int bottom,int iframe){int i,j;SelectObject(hdcsrc,hBm);for(j=top;j<bottom;j+=height){for(i=left;i<right;i+=width){BitBlt(hdcdest,i,j,width,height,hdcsrc,iframe*width,0,SRCCO PY);}}}void MYBITMAP::ShowNoBack(int x,int y,int iFrame){xpos=x;ypos=y;SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,iFrame*width, height/2,SRCAND);BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,iFrame*width, 0,SRCPAINT);}void MYBITMAP::ShowNoBackLoop(int x,int y,int iFrame,int iNum){int i;xpos=x;ypos=y;SelectObject(hdcsrc,hBm);for(i=0;i<iNum;i++){BitBlt(hdcdest,xpos+i*width,ypos,width,height/2,hdcsrc,iFram e*width,height/2,SRCAND);BitBlt(hdcdest,xpos+i*width,ypos,width,height/2,hdcsrc,iFram e*width,0,SRCPAINT); }}void MYBITMAP::ShowAni(){/* if(!iStartAni)return;SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,framenow*wid th,height/2,SRCAND);BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,framenow*wid th,0,SRCPAINT);framenow++;//播放结束if(framenow>=inum)iStartAni=0;*/}void MYBITMAP::SetAni(int x,int y){xpos=x;ypos=y;/*framenow=0;iStartAni=1;*/}void MYBITMAP::SetPos(int istyle,int x,int y){switch(istyle){case BM_CENTER:xpos=(screenwidth-width)/2;ypos=y;break;case BM_USER:xpos=x;ypos=y;break;}}void MYBITMAP::Draw(DWORD dwRop){SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos,width,height,hdcsrc,0,0,dwRop);}void MYBITMAP::Stretch(int x,int y){SelectObject(hdcsrc,hBm);StretchBlt(hdcdest,xpos,ypos,width*x,height*y,hdcsrc,0,0,width,height,SRCCOPY);}void MYBITMAP::Stretch(int x,int y,int id){SelectObject(hdcsrc,hBm);StretchBlt(hdcdest,xpos,ypos,width*x,height*y,hdcsrc,0,id*height,width,height,SRCCOPY);}///////////////////////// bitmap object animation////////////////// MYBKSKY::MYBKSKY(){xseparate=0;}MYBKSKY::~MYBKSKY(){}void MYBKSKY::MoveTo(int x,int y){xpos=x;ypos=y;}void MYBKSKY::MoveRoll(int x){xseparate+=x;xseparate%=width;if(xseparate<0){xseparate=width;}}void MYBKSKY::DrawRoll(){SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos,width-xseparate,height,hdcsrc,xseparate,0,SRCCOPY);BitBlt(hdcdest,xpos+width-xseparate,ypos,xseparate,height,hdcsrc,0,0,SRCCOPY);}void MYBKSKY::DrawRollStretch(int x,int y){SelectObject(hdcsrc,hBm);StretchBlt(hdcdest,xpos,ypos,(width-xseparate)*x,height*y,hdcsrc,xseparate,0,width-xseparate,height,SRCCOPY);StretchBlt(hdcdest,xpos+(width-xseparate)*x,ypos, xseparate*x,height*y,hdcsrc,0,0,xseparate,height,SRCCOPY);}void MYBKSKY::DrawRollStretch(int x,int y, int id) {SelectObject(hdcsrc,hBm);StretchBlt(hdcdest,xpos,ypos,(width-xseparate)*x,height*y,hdcsrc,xseparate,id*height,width-xseparate,height,SRCCOPY);StretchBlt(hdcdest,xpos+(width-xseparate)*x,ypos, xseparate*x,height*y,hdcsrc,0,id*height,xseparate,height,SRCCOPY);}///////////////////////// bitmap role////////////////// MYROLE::MYROLE(){}MYROLE::~MYROLE(){}void MYROLE::MoveTo(int x,int y){xpos=x;ypos=y;}void MYROLE::MoveOffset(int x,int y){if(x==0 && y==0)return;if(!gamemap.RoleCanMove(x,y))return;xpos+=x;ypos+=y;if(xpos<minx)xpos=minx;if(xpos>maxx)xpos=maxx;}void MYROLE::MoveStepTo(int x,int y){if(xpos<x)xpos+=ROLE_STEP;if(ypos<y)ypos+=8;if(ypos>y)ypos=y;}// 去背显示void MYROLE::Draw(){if(iAniBegin){PlayAni();}else{SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,iFrame*width,height/2,SRCAND);BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,iFrame*width,0,SRCPAINT);}}void MYROLE::Draw(int x,int y,int frame){SelectObject(hdcsrc,hBm);BitBlt(hdcdest,x,y,width,height/2,hdcsrc,frame*width,height/2,SRCAND);BitBlt(hdcdest,x,y,width,height/2,hdcsrc,frame*width,0,SRCPAINT);}void MYROLE::InitRole(int xleft,int xright){iFrame=0;iState=0;maxx=xright;minx=xleft;jumpheight=0;movex=0;movey=0;jumpx=0;idirec=0;iAniBegin=0;}void MYROLE::SetLimit(int xleft,int xright){maxx=xright;minx=xleft;}void MYROLE::Move(){if(0 == movey){//水平移动MoveOffset(movex, 0);}else{//跳动MoveOffset(jumpx, 0);MoveOffset(0, movey);}//帧控制if(movex<0 && iFrame<3){iFrame=3;}if(movex>0 && iFrame>=3){iFrame=0;}if(movex!=0){if(0==idirec)iFrame=1-iFrame;elseiFrame=7-iFrame;}if(movey!=0){iFrame=idirec*3;}if(movey<0){//upjumpheight+=(-movey);//根据重力影响,加速度减慢if(movey<-1){movey++;}//到达顶点后向下落if(jumpheight >= JUMP_HEIGHT * 32){jumpheight = JUMP_HEIGHT * 32;movey=4;}}else if(movey>0){jumpheight -= movey;//根据重力影响,加速度增大movey++;}}void MYROLE::Jump(){//上升过程MoveOffset(0, -4);}void MYROLE::ChangeFrame(){}void MYROLE::SetState(int i){iState=i;}void MYROLE::SetAni(int istyle){ iAniStyle=istyle;iparam1=0;iAniBegin=1;}//是否正在播放动画int MYROLE::IsInAni(){ return iAniBegin;}void MYROLE::PlayAni(){switch(iAniStyle){case ROLE_ANI_DOWN:if(iparam1>31){break;}//人物下降动画SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos+iparam1,width,height/2-iparam1,hdcsrc,iFrame*width,height/2,SRCAND);BitBlt(hdcdest,xpos,ypos+iparam1,width,height/2-iparam1,hdcsrc,iFrame*width,0,SRCPAINT);iparam1++;break;case ROLE_ANI_UP:if(iparam1>31){break;}//人物上升动画SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos+32-iparam1,width,iparam1,hdcsrc,iFrame*width,height/2,SRCAND);BitBlt(hdcdest,xpos,ypos+32-iparam1,width,iparam1,hdcsrc,iFrame*width,0,SRCPAINT);iparam1++;if(iparam1>31){iAniBegin=0; //动画结束}default:break;}}/////////////////////////////////// my animation ///////////////////// MYANIOBJ::MYANIOBJ(){memset(wlist, 0, sizeof(wlist));memset(hlist, 0, sizeof(hlist));memset(ylist, 0, sizeof(ylist));iframeplay=0;}MYANIOBJ::~MYANIOBJ(){}void MYANIOBJ::DrawItem(int x,int y,int id,int iframe){SelectObject(hdcsrc,hBm);BitBlt(hdcdest,x,y,wlist[id],hlist[id],hdcsrc,iframe*wlist[id],ylist[id]+hlist[id],SRCAND);BitBlt(hdcdest,x,y,wlist[id],hlist[id],hdcsrc,iframe*wlist[id],ylist[id],SRCPAINT);}void MYANIOBJ::DrawItemNoMask(int x,int y,int id,int iframe) {SelectObject(hdcsrc,hBm);BitBlt(hdcdest,x,y,wlist[id],hlist[id],hdcsrc,iframe*wlist[id],ylist[id],SRCCOPY);}void MYANIOBJ::DrawItemNoMaskWidth(int x,int y,int id,int w,int iframe){SelectObject(hdcsrc,hBm);BitBlt(hdcdest,x,y,w,hlist[id],hdcsrc,iframe*wlist[id],ylist[id],SRCCOPY);}void MYANIOBJ::PlayItem(int x,int y,int id){SelectObject(hdcsrc,hBm);BitBlt(hdcdest,x,y,wlist[id],hlist[id],hdcsrc,iframeplay*wlist[id],ylist[id]+hlist[id],SRCAND);BitBlt(hdcdest,x,y,wlist[id],hlist[id],hdcsrc,iframeplay*wlist[id],ylist[id],SRCPAINT);iframeplay=(iframeplay+1)%2;}void MYANIOBJ::InitAniList(int *pw,int *ph,int inum,int ismask) {int i;memcpy(wlist, pw, inum*sizeof(int));memcpy(hlist, ph, inum*sizeof(int));ylist[0]=0;for(i=1;i<inum;i++){//如果是mask,两张图片的间隔高度要乘以2ylist[i]=ylist[i-1]+hlist[i-1]*(ismask+1);}}void MYANIOBJ::InitAniList(int style,int a, int b){int i;switch(style){case BM_SQUARE:// a : 数量, b: 边长for(i=0;i<a;i++){wlist[i]=b;hlist[i]=b;ylist[i]=i*b;}break;default:break;}}/////////////////////////////////// my animation magic///////////////////// MYANIMAGIC::MYANIMAGIC(){memset(wlist, 0, sizeof(wlist));memset(hlist, 0, sizeof(hlist));memset(ylist, 0, sizeof(ylist));}MYANIMAGIC::~MYANIMAGIC(){}void MYANIMAGIC::DrawItem(int x,int y,int id,int iframe) {SelectObject(hdcsrc,hBm);BitBlt(hdcdest,x,y,wlist[id],hlist[id],hdcsrc,iframe*wlist[id],ylist[id]+hlist[id],SRCAND);BitBlt(hdcdest,x,y,wlist[id],hlist[id],hdcsrc,iframe*wlist[id],ylist[id],SRCPAINT);/*//先在临时DC上画出效果总图BitBlt(hdctemp,0,0,wlist[id],hlist[id],hdcsrc,0,ylist[id],SRCCOPY);//用MASK图作裁剪BitBlt(hdctemp,0,0,wlist[id],hlist[id],hdcsrc,iframe*wlist[id],ylist[id],SRCPAINT);//最后画到屏幕上BitBlt(hdcdest,x,y,wlist[id],hlist[id],hdctemp,0,0,SRCPAINT);*/}//带MASKvoid MYANIMAGIC::InitAniList(int *pw,int *ph,int inum) {int i;memcpy(wlist, pw, inum*sizeof(int));memcpy(hlist, ph, inum*sizeof(int));ylist[0]=0;for(i=1;i<inum;i++){ylist[i]=ylist[i-1]+hlist[i-1]*2;}}void MYANIMAGIC::SetDevice(HDC hdest, HDC hsrc, HDC htemp){hdcdest=hdest;hdcsrc=hsrc;hdctemp=htemp;}//filereport.h#ifndef __FILEREPORT#define __FILEREPORTclass FILEREPORT{public:FILEREPORT();FILEREPORT(char *p);~FILEREPORT();void put(char *p);void put(char *p,int a,int b);void putnum(int i,char *p);//////////void CheckDC(HDC h,char *p);//showvoid SetDevice(HDC h,int x,int y);void Output(char *p,int a,int b);void Show();private:FILE *fp;//计数器组int num[5];//showHDC hshow;int xpos;int ypos;char info[50];};#endif//filereport.cpp#include "stdafx.h"#include "filereport.h"#include "stdio.h"#include "stdlib.h"FILEREPORT::FILEREPORT(){fp=fopen("trace.txt","w");memset(num,0,sizeof(num));}FILEREPORT::FILEREPORT(char *p){fp=fopen(p,"w");memset(num,0,sizeof(num)); }FILEREPORT::~FILEREPORT(){fclose(fp);}void FILEREPORT::put(char *p){fwrite(p,sizeof(char),strlen(p),fp);fwrite("\n",1,1,fp);}//带计数器的跟踪void FILEREPORT::putnum(int i,char *p){char temp[50];sprintf(temp,"(%d) ",num[i]);fwrite(temp,sizeof(char),strlen(temp),fp);num[i]++;fwrite(p,sizeof(char),strlen(p),fp);fwrite("\n",1,1,fp);}void FILEREPORT::put(char *p,int a,int b){char temp[50];sprintf(temp,"%s : %d , %d",p,a,b);fwrite(temp,sizeof(char),strlen(temp),fp);fwrite("\n",1,1,fp);}void FILEREPORT::CheckDC(HDC h,char *p) {if(h==NULL){fwrite(p,sizeof(char),strlen(p),fp);fwrite("\n",1,1,fp);}}void FILEREPORT::SetDevice(HDC h,int x,int y) {hshow=h;xpos=x;ypos=y;}void FILEREPORT::Output(char *p,int a,int b) {sprintf(info,"%s:%d,%d",p,a,b);}void FILEREPORT::Show(){TextOut(hshow,xpos,ypos,info,strlen(info)); }//gamemap.h#ifndef __GAMEMAP#define __GAMEMAP#include "bitmaptool.h"struct MapObject{int x;int y;int w;int h;int id;int iframe;int iframemax;//最大帧数int show; //是否显示};struct ROLE{int x;int y;int w;int h;int id;int iframe;int iframemax;//最大帧数//移动局部int xleft;//左界限int xright;//右界限int movex;//人物属性int health;int show; //是否显示};struct MAPINFO{int iNextMap;int iSubMap;int xReturnPoint;int yReturnPoint;int iBackBmp;int viewmax;};class GAMEMAP{public:int LoadMap();void Init();void InitMatch();//入参,物体索引图void Show(MYANIOBJ & bmobj);//入参,背景物体索引图void ShowBkObj(MYANIOBJ & bmobj);//入参,动画物体索引图void ShowAniObj(MYANIOBJ & bmobj);void ShowInfo(HDC h);void ShowOther(HDC h);//键盘处理int KeyProc(int iKey);void KeyUpProc(int iKey);void MoveView();//设置视图起始坐标void SetView(int x);void SetViewState(int i);void SetGameState(int i);//hittestint RoleCanMove(int xoff, int yoff);int CheckRole(); int CheckAni(int itimeclip);void ClearEnemy(int i);void ClearCoin(int i);//动画帧控制void ChangeFrame(int itimeclip);//入参,时间片//逻辑检测int IsWin();void Fail();void Fail_Wait();//地图切换void ChangeMap();//错误检查void CodeErr(int i);//菜单控制void ShowMenu(MYANIOBJ & bmobj);GAMEMAP();~GAMEMAP();//dataint iMatch;int iLife;int iGameState;struct MapObject MapArray[MAX_MAP_OBJECT];int iMapObjNum;struct MapObject MapBkArray[MAX_MAP_OBJECT]; int iMapBkObjNum;struct ROLE MapEnemyArray[MAX_MAP_OBJECT]; int iMapEnemyCursor;struct MapObject MapCoinArray[MAX_MAP_OBJECT]; int iCoinNum;//MAP DA TAint iNextMap;// role dataint iMoney;int iAttack; //攻击方式//viewint viewx;int viewy;int iViewState;//地图数据struct MAPINFO mapinfo;//frame controlint ienemyframe;int ibkobjframe;//FIREstruct ROLE FireArray[MAX_MAP_OBJECT];int iFireNum;int iTimeFire;//两个子弹的时间间隔int iBeginFire;//bombstruct MapObject BombArray[MAX_MAP_OBJECT]; int iBombNum;//攻击对象提示char AttackName[20];int iAttackLife;int iAttackMaxLife;//菜单局部int iMenu;//屏幕缩放int iScreenScale;};#endif//gamemap.cpp// Finishing #include "stdafx.h"#include "gamemap.h"#include "myclock.h"#include "tool01.h"#include "texttool.h"extern int wwin,hwin;extern HWND hWndMain;//根本图像extern MYANIOBJ bmMap;//天空背景extern MYBKSKY bmSky;//角色extern MYROLE rmain;//计时器extern MYCLOCK c1;extern MYANIMAGIC bmMagic;extern struct MAPINFO allmapinfo[];extern struct ROLE gl_enemy_normal;//extern FILEREPORT f1;GAMEMAP::GAMEMAP(){iScreenScale=0;Init();}GAMEMAP::~GAMEMAP(){}int GAMEMAP::LoadMap(){FILE *fp;char temp[50]={0};int find=0;int i;memset(MapArray,0,sizeof(MapArray));iMapObjNum=0;memset(MapBkArray,0,sizeof(MapBkArray));iMapBkObjNum=0;memset(MapEnemyArray,0,sizeof(MapEnemyArray));memset(MapCoinArray,0,sizeof(MapCoinArray));iCoinNum=0; fp=fopen(PA TH_MAP,"r");if(!fp){return 0;}while(!find && !feof(fp)){FGetLine(temp,fp);if(temp[0]=='*' && temp[1]=='0'+iMatch){find=1;}}if(!find){return 0;}//找到了某一关的地图数据i=0;FGetLineJumpCom(temp,fp);while(temp[0]!='#' && !feof(fp)){//map datasscanf(temp,"%d %d %d %d %d",&MapArray[i].x,&MapArray[i].y,&MapArray[i].w,&MapArray[i].h,&MapArray[i].id);MapArray[i].show=0;iMapObjNum++;i++;FGetLineJumpCom(temp,fp);}i=0;FGetLineJumpCom(temp,fp);while(temp[0]!='#' && !feof(fp)){sscanf(temp,"%d %d %d %d %d",&MapBkArray[i].x,&MapBkArray[i].y,&MapBkArray[i].w,&MapBkArray[i].h,&MapBkArray[i].id);MapBkArray[i].show=0;MapBkArray[i].iframe=0;iMapBkObjNum++;i++;FGetLineJumpCom(temp,fp);}i=0;FGetLineJumpCom(temp,fp);while(temp[0]!='#' && !feof(fp)){sscanf(temp,"%d %d %d %d %d %d %d", &MapEnemyArray[i].x,&MapEnemyArray[i].y,&MapEnemyArray[i].w,&MapEnemyArray[i].h,&MapEnemyArray[i].id,&MapEnemyArray[i].xleft,&MapEnemyArray[i].xright);//动画元件,使用绝对坐标MapEnemyArray[i].x*=32;MapEnemyArray[i].y*=32;MapEnemyArray[i].w*=32;MapEnemyArray[i].h*=32;MapEnemyArray[i].xleft*=32;MapEnemyArray[i].xright*=32;MapEnemyArray[i].show=1;MapEnemyArray[i].movex=-ENEMY_STEP_X;MapEnemyArray[i].iframe=0;MapEnemyArray[i].iframemax=2;//设置生命值switch(MapEnemyArray[i].id){case ID_ANI_BOSS_HOUSE:MapEnemyArray[i].health=BOSS_HEALTH;break;case ID_ANI_BOSS_HOUSE_A:MapEnemyArray[i].health=BOSS_A_HEALTH;break;default:MapEnemyArray[i].health=1;break;}//将BOSS存储在数组的后半段if ( i<BOSS_CURSOR&& ( MapEnemyArray[i].id == ID_ANI_BOSS_HOUSE|| MapEnemyArray[i].id == ID_ANI_BOSS_HOUSE_A) ){//move data to BOSS_CURSORMapEnemyArray[BOSS_CURSOR]=MapEnemyArray[i];memset(&MapEnemyArray[i],0,sizeof(MapEnemyArray[i]));i=BOSS_CURSOR;}i++;FGetLineJumpCom(temp,fp);}i=0;FGetLineJumpCom(temp,fp);while(temp[0]!='#' && !feof(fp)){sscanf(temp,"%d %d %d %d %d",&MapCoinArray[i].x,&MapCoinArray[i].y,&MapCoinArray[i].w,&MapCoinArray[i].h,&MapCoinArray[i].id);MapCoinArray[i].show=1;MapCoinArray[i].iframe=0;//索引坐标转化为绝对坐标MapCoinArray[i].x*=32;MapCoinArray[i].y*=32;//设置这个动画元件的最大帧switch(MapCoinArray[i].id){case ID_ANI_COIN:MapCoinArray[i].iframemax=4;break;default:MapCoinArray[i].iframemax=2;break;}i++;iCoinNum++;FGetLineJumpCom(temp,fp);}fclose(fp);return 1;}void GAMEMAP::Init(){iGameState=GAME_PRE;iMatch=0;iLife=3;iMoney=0;//攻击种类iAttack=ATTACK_NORMAL;iMenu=0;viewx=0;InitMatch();}void GAMEMAP::InitMatch(){memset(MapArray,0,sizeof(MapArray));memset(MapBkArray,0,sizeof(MapBkArray));memset(MapEnemyArray,0,sizeof(MapEnemyArray));memset(MapCoinArray,0,sizeof(MapCoinArray));memset(FireArray,0,sizeof(FireArray));memset(BombArray,0,sizeof(BombArray));iMapObjNum=0;iMapBkObjNum=0;iBombNum=0;iCoinNum=0;//设置视图坐标viewy=0;ienemyframe=0;iFireNum=0;iTimeFire=0;iBeginFire=0;ibkobjframe=0;//获取地图信息mapinfo=allmapinfo[iMatch];//初始化攻击对象提示memset(AttackName,0,sizeof(AttackName));iAttackLife=0;iAttackMaxLife=0;iMapEnemyCursor=0;}//显示地图void GAMEMAP::Show(MYANIOBJ & bmobj){int i;int xstart,ystart;int j,k;for(i=0;i<iMapObjNum;i++){ystart=MapArray[i].y*32;switch(MapArray[i].id){//进出的下水道case ID_MAP_PUMP_IN:case ID_MAP_PUMP_OUT:xstart=MapArray[i].x*32;bmobj.DrawItemNoMask(xstart, ystart, MapArray[i].id, 0);break;default:for(j=0;j<MapArray[i].h;j++){xstart=MapArray[i].x*32;for(k=0;k<MapArray[i].w;k++){bmobj.DrawItemNoMask(xstart, ystart, MapArray[i].id, 0);xstart+=32;}ystart+=32;} // end of forbreak;}//end of switch}}void GAMEMAP::ChangeMap(){viewx=0;//iMatch=mapinfo.iSubMap;InitMatch();rmain.SetPos(BM_USER,mapinfo.xReturnPoint*32,mapinfo.y ReturnPoint*32);rmain.InitRole(0,GAMEW*32*MAX_PAGE-32);//设定视图位置if(rmain.xpos - viewx > 150){SetView(mapinfo.xReturnPoint*32-32);//往左让一格if(viewx>(mapinfo.viewmax-1)*GAMEW*32)viewx=(mapinfo.viewmax-1)*GAMEW*32;}//设定人物活动范围rmain.SetLimit(viewx, GAMEW*32*MAX_PAGE);//设定背景图片坐标bmSky.SetPos(BM_USER,viewx,0);LoadMap();}int GAMEMAP::KeyProc(int iKey){int i;switch(iGameState){case GAME_PRE:switch(iKey){case 0xd://enterswitch(iMenu){case 0:c1.ReStart(TIME_GAME_IN_PRE); //停顿两秒iGameState=GAME_IN_PRE;break;case 1:SetGameState(GAME_HELP);break;}break;case VK_UP:iMenu=(iMenu+1)%2;break;case VK_DOWN:iMenu=(iMenu+1)%2;break;}return 1;//重绘case GAME_HELP:switch(iKey){case 0xd: //enterSetGameState(GAME_PRE);break;}return 1;case GAME_IN://如果人物正在播放动画,拒绝键盘响应if(rmain.IsInAni()){break;}switch(iKey){case VK_RIGHT:if(rmain.movey!=0){rmain.jumpx=4;}rmain.movex=4;rmain.idirec=0;break;case VK_LEFT:if(rmain.movey!=0){rmain.jumpx=-4;}rmain.movex=-4;rmain.idirec=1;//朝左break;case VK_DOWN:for(i=0;i<iMapObjNum;i++){//下方线if( LINE_IN_LINE(rmain.xpos,rmain.ypos+32,32,MapArray[i].x*32,MapArray[i].y*32,MapArray[i].w*32)){if(MapArray[i].id == ID_MAP_PUMP_IN){//进入地图rmain.SetAni(ROLE_ANI_DOWN);iGameState=GAME_PUMP_IN;c1.ReStart(TIME_GAME_PUMP_WAIT);}}}break;case KEY_X: //跳if(rmain.movey!=0)break;rmain.movey=-SPEED_JUMP;rmain.jumpx=rmain.movex;//解决x键和方向键的响应问题break;case KEY_Z: //FIREif(iBeginFire)break;iTimeFire=0;iBeginFire=1;break;case 0x7a://f11iAttack=(iAttack+1)%ATTACK_MAX_TYPE;break;//直接通关rmain.xpos = MAX_PAGE*GAMEW*32;break;}break;}return 0;}void GAMEMAP::SetViewState(int i){iViewState=i;}void GAMEMAP::SetGameState(int i){iGameState=i;}void GAMEMAP::SetView(int x){viewx=x;}//移动视图//视图不能往右移void GAMEMAP::MoveView(){//只有一屏宽,不移动视图if(mapinfo.viewmax == 1)return;if(rmain.xpos - viewx > 150){viewx+=ROLE_STEP;if(viewx>(mapinfo.viewmax-1)*GAMEW*32)viewx=(mapinfo.viewmax-1)*GAMEW*32;//设置人物移动的最大范围rmain.SetLimit(viewx, GAMEW*32*MAX_PAGE);}bmSky.SetPos(BM_USER,viewx,0);}void GAMEMAP::ShowBkObj(MYANIOBJ & bmobj){int i;int xstart,ystart;for(i=0;i<iMapBkObjNum;i++){ystart=MapBkArray[i].y*32;xstart=MapBkArray[i].x*32;bmobj.DrawItem(xstart,ystart,MapBkArray[i].id,ibkobjframe);}}void GAMEMAP::ShowInfo(HDC h){char temp[50]={0};SetTextColor(h, TC_WHITE);SetBkColor(h, TC_BLACK);sprintf(temp, "LIFE : %d",iLife);TextOut(h, 220,100,temp,strlen(temp));sprintf(temp, "WORLD : %d",iMatch+1);TextOut(h, 220,130,temp,strlen(temp));}void GAMEMAP::ShowOther(HDC h){char temp[50]={0};int xstart;//show moneysprintf(temp,"MONEY: %d",iMoney);TextOut(h,viewx+20,20,temp,strlen(temp));//显示攻击对象生命值if(iAttackLife){TextOut(h,viewx+ATTACK_TO_TEXT_X,ATTACK_TO_TEXT_Y,AttackName,strlen(AttackName));//画生命条xstart=viewx+ATTACK_TO_X-iAttackMaxLife*10;bmMap.DrawItemNoMaskWidth(xstart-1,ATTACK_TO_Y-1,ID_MAP_HEALTH_BK,iAttackMaxLife*BMP_WIDTH_HEALTH, 0);bmMap.DrawItemNoMaskWidth(xstart,ATTACK_TO_Y,ID_MAP_HEALTH,iAttackLife*BMP_WIDTH_HEALTH, 0);}}void GAMEMAP::ShowAniObj(MYANIOBJ & bmobj){int i;int xstart,ystart;//显示金币,和其他物品for(i=0;i<iCoinNum;i++){ystart=MapCoinArray[i].y;xstart=MapCoinArray[i].x;bmobj.DrawItem(xstart,ystart,MapCoinArray[i].id, MapCoinArray[i].iframe);}//显示敌人for(i=0;i<MAX_MAP_OBJECT;i++){if (MapEnemyArray[i].show){bmobj.DrawItem(MapEnemyArray[i].x,MapEnemyArray[i].y, MapEnemyArray[i].id,MapEnemyArray[i].iframe);}}//显示子弹,魔法攻击for(i=0;i<MAX_MAP_OBJECT;i++){if (FireArray[i].show){ystart=FireArray[i].y;xstart=FireArray[i].x;switch(FireArray[i].id){case ID_ANI_FIRE:bmobj.DrawItem(xstart,ystart,FireArray[i].id,FireArray[i].ifra me);break;case ID_ANI_FIRE_MAGIC:bmMagic.DrawItem(xstart,ystart, 0, FireArray[i].iframe);break;default:bmobj.DrawItem(xstart,ystart,FireArray[i].id,FireArray[i].ifra me);break;}}}//显示爆炸效果for(i=0;i<MAX_MAP_OBJECT;i++){if (BombArray[i].show){ystart=BombArray[i].y;xstart=BombArray[i].x;bmobj.DrawItem(xstart,ystart,BombArray[i].id, BombArray[i].iframe);}}} // 返回0,不能走;1,能走int GAMEMAP::RoleCanMove(int xoff, int yoff){int canmove=1;int i;for(i=0;i<iMapObjNum;i++){if( RECT_HIT_RECT(rmain.xpos+xoff,rmain.ypos+yoff,32,32,MapArray[i].x*32,MapArray[i].y*32,MapArray[i].w*32,MapArray[i].h*32)){canmove=0;if(yoff<0){//碰到了上面的物体要向下落rmain.movey=1;}if(yoff>0){//碰到了下面的物体,要停止下落rmain.jumpheight=0;rmain.movey=0;rmain.ypos=MapArray[i].y*32-32;//纵坐标要修正}break;}}return canmove;}//检查人物水平移动过程中,是否走出地图物体边界int GAMEMAP::CheckRole(){int i;//角色的检查if(rmain.movey == 0 ){//在水平移动,//检测角色是否站在某个物体上for(i=0;i<iMapObjNum;i++){//下方线if( LINE_ON_LINE(rmain.xpos,rmain.ypos+32,32,MapArray[i].x*32,MapArray[i].y*32,MapArray[i].w*32)){return 1;}}//角色开始下落rmain.movey=1;rmain.jumpx=0;//此时要去除跳跃速度,否那么将变成跳跃,而不是落体return 0;}return 0;}void GAMEMAP::ChangeFrame(int itimeclip){int i;///////////// 帧控制////////////////if(0 == itimeclip% ENEMY_SPEED){//敌人移动for(i=0;i<MAX_MAP_OBJECT;i++){if(MapEnemyArray[i].show){//帧控制MapEnemyArray[i].iframe=(MapEnemyArray[i].iframe+1)% MapEnemyArray[i].iframemax;switch(MapEnemyArray[i].id){case ID_ANI_ENEMY_NORMAL:case ID_ANI_ENEMY_SWORD: MapEnemyArray[i].x+=MapEnemyArray[i].movex;//控制敌人移动if(MapEnemyArray[i].movex<0){if(MapEnemyArray[i].x<=MapEnemyArray[i].xleft){MapEnemyArray[i].movex=ENEMY_STEP_X;}}else{if(MapEnemyArray[i].x>=MapEnemyArray[i].xright){MapEnemyArray[i].movex=-ENEMY_STEP_X;}}break;}}}}if(0 == itimeclip% WATER_SPEED){ibkobjframe=1-ibkobjframe;for(i=0;i<MAX_MAP_OBJECT;i++){if(MapCoinArray[i].show){MapCoinArray[i].iframe=(MapCoinArray[i].iframe+1)%MapC oinArray[i].iframemax;}}}//子弹,攻击控制for(i=0;i<MAX_MAP_OBJECT;i++){if(FireArray[i].show){switch(FireArray[i].id){case ID_ANI_FIRE_MAGIC:FireArray[i].iframe++;if(FireArray[i].iframe == 2){FireArray[i].x+=FIRE_MAGIC_W;}if(FireArray[i].iframe>3){FireArray[i].show=0;}break;default:FireArray[i].iframe=1-FireArray[i].iframe;break;}}}//bomb frame controlfor(i=0;i<MAX_MAP_OBJECT;i++){if(BombArray[i].show){BombArray[i].iframe++;if(BombArray[i].iframe>3){BombArray[i].show=0;}}}}int GAMEMAP::CheckAni(int itimeclip){int i,j;int tempx,tempy;//检测子弹和敌人的碰撞〔包括魔法攻击〕for(i=0;i<MAX_MAP_OBJECT;i++){if(MapEnemyArray[i].show){for(j=0;j<MAX_MAP_OBJECT;j++){if (FireArray[j].show){if(RECT_HIT_RECT(FireArray[j].x+FIRE_XOFF,FireArray[j].y,FireArray[j].w,FireArray[j].h,MapEnemyArray[i].x,MapEnemyArray[i].y,MapEnemyArray[i].w,MapEnemyArray[i].h)){ClearEnemy(i);//魔法攻击时,攻击效果的消除由帧控制。
python超级马里奥设计过程

Python超级马里奥设计过程简介本文将介绍使用P yth o n语言设计超级马里奥游戏的过程。
我们将从游戏的基本框架开始,逐步完善游戏的功能和特色。
通过本文的指导,读者可以了解到如何利用P yt ho n语言开发精彩有趣的游戏。
准备工作在开始之前,我们需要确保已经安装了Py t ho n的开发环境。
如果尚未安装,可以从P yth o n官方网站下载最新的Py th on版本并进行安装。
创建游戏窗口首先,我们将创建一个游戏窗口来容纳整个游戏。
使用Py th on的G U I库,我们可以轻松地创建一个窗口,并设置窗口的大小和标题。
i m po rt py ga me初始化pygamep y ga me.i ni t()设置窗口大小和标题s c re en=p yg am e.dis p la y.se t_mo de((800,600))p y ga me.d is pl ay.se t_c ap ti on("超级马里奥")游戏循环r u nn in g=Tr uew h il er un ni ng:事件处理f o re ve nt in py ga me.e ve nt.g et():i f ev en t.ty pe==pyg a me.Q UI T:r u nn in g=Fa ls e刷新屏幕p y ga me.d is pl ay.fl i p()退出游戏p y ga me.q ui t()添加背景和角色接下来,我们将添加游戏的背景和主角。
在游戏中,背景可以为多个不同场景,而角色则是我们操纵的游戏主体。
i m po rt py ga me初始化pygamep y ga me.i ni t()设置窗口大小和标题s c re en=p yg am e.dis p la y.se t_mo de((800,600))p y ga me.d is pl ay.se t_c ap ti on("超级马里奥")加载背景图片b a ck gr ou nd=p yg ame.im ag e.lo ad("bac k gr ou nd.p ng")加载角色图片c h ar ac te r=py ga me.i ma ge.l oa d("c har a ct er.p ng")游戏循环r u nn in g=Tr uew h il er un ni ng:事件处理f o re ve nt in py ga me.e ve nt.g et():i f ev en t.ty pe==pyg a me.Q UI T:r u nn in g=Fa ls e绘制背景和角色s c re en.b li t(ba ckg r ou nd,(0,0))s c re en.b li t(ch ara c te r,(400,300))刷新屏幕p y ga me.d is pl ay.fl i p()退出游戏p y ga me.q ui t()处理键盘输入为了使游戏更加互动,我们需要处理键盘的输入。
python的简单代码

Python的简单代码1. 介绍Python是一种简单易学的高级编程语言,具有清晰简洁的语法和强大的功能。
它广泛应用于各行业和领域,无论是网站开发、数据分析、机器学习还是科学计算,Python都表现出色。
本文将探讨Python的一些简单代码示例,帮助读者更好地理解和掌握该语言。
2. 条件语句2.1 if语句条件语句是程序中常用的一种结构,可以根据条件判断来执行不同的代码块。
Python中的if语句非常简洁,如下所示:age = 18if age >= 18:print("你已经成年了!")else:print("你还未成年!")2.2 elif语句在某些情况下,我们需要检查多个条件并根据结果执行相应的代码块。
Python提供了elif语句来实现这样的功能,示例如下:age = 18if age < 18:print("你还未成年!")elif age <= 25:print("你已经成年,但还年轻!")else:print("你已经进入成年阶段!")3. 循环结构3.1 for循环for循环是Python中最常用的循环结构之一,用于遍历序列或可迭代对象。
以下是一个简单的for循环示例:for num in range(1, 6):print(num)以上代码将输出数字1到5,因为range(1, 6)生成的是一个包含1到5的数字序列。
3.2 while循环while循环是另一种常用的循环结构,它根据条件判断来重复执行代码块。
以下是一个简单的while循环示例:count = 0while count < 5:print("当前计数:", count)count += 1以上代码将打印出计数器的值,直到count的值达到5为止。
4. 函数定义4.1 简单函数函数是一种封装了一段可重复使用的代码的方式。
python的简单代码

python的简单代码Python的简单代码Python是一种高级编程语言,它具有简单易学、可读性强、跨平台等特点。
在Python中,我们可以使用简单的代码实现各种功能。
下面将介绍几个常见的Python简单代码。
一、输出Hello World在Python中,输出"Hello World"是最基本的程序。
只需要一行代码即可实现:print("Hello World")这个程序会在控制台中输出"Hello World"。
二、计算器Python可以作为一个简单的计算器使用。
例如,我们要计算1+2+3+4+5的结果,可以这样写:sum = 1 + 2 + 3 + 4 + 5print(sum)这个程序会输出15,也就是1到5的和。
三、判断奇偶数判断一个数是奇数还是偶数也很简单。
我们只需要使用取模运算符%来判断即可。
如果一个数除以2余1,则为奇数;否则为偶数。
例如:num = 7if num % 2 == 0:print(num, "is even")else:print(num, "is odd")这个程序会输出"7 is odd"。
四、求平方根求平方根也很容易,在Python中可以使用math库中的sqrt函数来实现。
例如:import mathnum = 16print(math.sqrt(num))这个程序会输出4.0,即16的平方根。
五、随机数生成在Python中,可以使用random库来生成随机数。
例如,我们要生成一个1到10之间的随机数,可以这样写:import randomprint(random.randint(1, 10))这个程序会输出一个1到10之间的随机整数。
六、字符串反转字符串反转也很简单,在Python中可以使用切片来实现。
例如:str = "Hello World"print(str[::-1])这个程序会输出"dlroW olleH",即将字符串"Hello World"反转。
python搞怪代码简单

python搞怪代码简单Python搞怪代码,可以用来让人有意想不到的趣味性,也可以是一种娱乐活动。
以下是一些简单的Python搞怪代码:首先是给出一个变量,然后把它重复输出50次,可以创建一个循环:message = "Hello World!"for i in range (50):print(message)这是一个自动计算大写字母空格数量的程序:sentence = input("Please enter a sentence: ")count = 0for letter in sentence:if letter.isupper():count += 1print("There are", count, "spaces in your sentence.")此外,还可以使用异常处理来“玩”一些搞怪的代码,比如说以下代码:def divide(a, b):try:return a/bexcept ZeroDivisionError:return "You can't divide by zero!"print(divide(3, 0))它可以返回一个搞怪的错误消息:You can't divide by zero!还可以利用递归函数来做一些奇特的事情,如下所示:def countdown(n):if n <= 0:print("Blast off!")else:print(n)countdown(n-1)countdown(5)这将打印出5个数字,最后一次输出Blast off!上面介绍的是一些最简单的python搞怪代码,使用这些基本的函数,就可以创建出各种有趣的程序。
通过以上几个实例,你可以更好地理解Python的基本语法,并且去尝试更多的搞怪代码。
Python马里奥系列游戏游戏代码

Python马里奥系列游戏游戏代码第一种:由于马里奥系列游戏涉及到图形界面、游戏逻辑等多个方面,这里仅提供一个简单的Python马里奥游戏框架,使用pygame库实现。
要运行此代码,请确保已安装pygame库。
import pygameimport sys# 初始化pygamepygame.init()# 设置窗口大小screen_width = 800screen_height = 600screen = pygame.display.set_mode((screen_width, screen_height))# 设置标题pygame.display.set_caption("简单马里奥")# 加载马里奥图片mario_image = pygame.image.load("mario.png")# 马里奥的初始位置mario_x = 0mario_y = screen_height - mario_image.get_height()# 游戏主循环while True:# 处理事件for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()# 检测按键if event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT:mario_x -= 5if event.key == pygame.K_RIGHT:mario_x += 5if event.key == pygame.K_UP:mario_y -= 5if event.key == pygame.K_DOWN:mario_y += 5# 清屏screen.fill((255, 255, 255))# 绘制马里奥screen.blit(mario_image, (mario_x, mario_y))# 更新屏幕pygame.display.update()请注意,这个代码仅仅实现了一个非常简化的马里奥游戏,只有一个可以移动的矩形马里奥角色。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
python超级玛丽最简单代码
超级玛丽游戏是一款经典的游戏,而Python是一种流行的编程语言。
在Python中编写超级玛丽游戏的代码非常简单,下面是一份超级玛
丽游戏的最简单代码:
```python
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Super Mario")
background = pygame.image.load("background.png")
player = pygame.image.load("player.png")
player_rect = player.get_rect()
player_rect.x = 400
player_rect.y = 300
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.blit(background, (0, 0))
screen.blit(player, player_rect)
pygame.display.update()
pygame.quit()
```
这份代码使用了Python的pygame库,pygame库是专门为游戏开发设计的库。
代码中首先导入pygame库并初始化游戏,然后创建了屏幕并设置了游戏窗口的大小和标题。
接着加载游戏背景和玩家角色的图片,并设置玩家角色的位置。
在游戏循环中,检测是否有退出事件发生,如果有则退出游戏;将游戏背景和玩家角色的图片显示在屏幕上。
最后在游戏结束时,退出pygame并结束游戏。
这份代码虽然很简单,但是已经能够实现超级玛丽游戏的基本操作。
如果想更加丰富地发挥超级玛丽游戏的玩法,可以在这份代码的基础上添加更多的功能。
总之,Python是一种非常适合游戏开发的语言,通过使用pygame 库,编写超级玛丽游戏的代码非常简单。
希望本篇文章能够帮助初学者理解Python游戏开发的基础知识。