cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 2863|回复: 0

HP39gii的任天堂明星大乱斗

[复制链接]
发表于 2020-11-28 12:25:52 | 显示全部楼层 |阅读模式
(原游戏版权属于任天堂、HAL研究所 版权所有)

试图还原大乱斗
注:在模拟器上会卡住
差点就还原了大乱斗的面筋人系统。(看那一堆LOCAL)
0.1版本 可能有bug

  1. //CalcSMASHBros.
  2. FX(X,Xf,Pow)
  3. BEGIN
  4.   IF Xf==0 THEN RETURN X; END;
  5.   (X+Xf?*(.001*(Pow+1)))=X;
  6.   RETURN X;
  7. END;
  8. 
  9. FY(Y,Yf,G)
  10. BEGIN
  11.   IF Yf==0 THEN RETURN Y; END;
  12.   Y+Yf?*.01+G=Y;
  13.   RETURN Y;
  14. END;

  15. EXPORT All;
  16. EXPORT Win;
  17. EXPORT CalcSBMain()
  18. BEGIN
  19.   LOCAL Xs,JMp;
  20.   LOCAL EX,EY,PX,PY,EFX,EFY,PFX,PFY;
  21.   LOCAL EIT,PIT,FP1,FP2,X,Y,Sync;
  22.   LOCAL INDE1,INDE2,INDE3,INDE4;
  23.   LOCAL BODX1,BODY1,BODX2,BODY2;
  24.   LOCAL ARMX1,ARMY1,ARMX2,ARMY2;
  25.   LOCAL HADX1,HADY1,HADX2,HADY2;
  26.   LOCAL FOTX1,FOTY1,FOTX2,FOTY2;
  27.   RECT;
  28.   TEXTOUT_P("任天堂",20,40,2,1);
  29.   TEXTOUT_P("计算器大乱斗    SX",71,41,2);
  30.   REPEAT
  31.     TEXTOUT_P("按任意键",70,100,1,1);
  32.     WAIT(.4);
  33.     TEXTOUT_P("按任意键",70,100,1,3);
  34.     WAIT(.2);
  35.   UNTIL GETKEY()≠-1;
  36.   1=Sync;
  37.   WHILE 1 DO
  38.     RECT;
  39.     RECT_P(130,1,160,27,0,3);
  40.     RECT_P(100,31,130,57,0,3);
  41.     RECT_P(70,61,100,87,0,3);
  42.     RECT_P(40,91,70 ,117,0,3);
  43.     TEXTOUT_P("F1 单人模式",162,17,1,0);
  44.     TEXTOUT_P("F2 双人对战",132,47,1,2);
  45.     TEXTOUT_P("F3 游戏设置",102,77,1,2);
  46.     TEXTOUT_P("F4 数据",72,107,1,0);
  47.     REPEAT
  48.       GETKEY()=INDE1;
  49.     UNTIL INDE1≠-1;
  50.     IF INDE1==3 THEN
  51.       RECT;
  52.       TEXTOUT_P("胜利:"+Win,20,40,2);
  53.       TEXTOUT_P("所有:"+All,20,60,2);
  54.       TEXTOUT_P("清零: ←",80,60,1);
  55.       REPEAT
  56.         GETKEY()=INDE1;
  57.         IF INDE1==20 THEN
  58.           0=Win;
  59.           0=All;
  60.           MSGBOX("已清零")
  61.         END;
  62.       UNTIL INDE1≠-1;
  63.     END;
  64.     IF INDE1==0 THEN
  65.       0=PY;
  66.       40=PX;
  67.       0=EY;
  68.       216=EX;
  69.       0=X;
  70.       0=Y;
  71. CHOOSE(INDE1,"难度","练习","25%","75%","100%");
  72.       INDE1-1=INDE1;
  73.       TEXTOUT("INIT",0,0,2);
  74.       WAIT(.6);
  75.       RECT;
  76.       TEXTOUT("GO!",0,0,2);
  77.       WAIT(.4);
  78.       RECT;
  79.       REPEAT
  80.         INDE4+Sync=INDE4;
  81.         IF irem(INDE4,8)≥6 THEN
  82.           TEXTOUT_P("?",200,110,2,0);
  83.           IF JMp≥1 THEN 0=JMp END;
  84.           RECT;
  85.         END;
  86.         TEXTOUT_P("?",200,110,2,3);
  87.         TEXTOUT_P(X+"%",50,110);
  88.         TEXTOUT_P(Y+"%",150,110);
  89.         LINE_P(30,108,226,108);
  90.         ARC_P(G0,PX,PY,6,0,359,INDE1);
  91.         LINE_P(PX,PY+6,PX+BODX1,PY+BODY1);  LINE_P(PX+BODX1,PY+BODY1,PX+BODX1+FOTX1,PY+BODY1+FOTY1);
  92. LINE_P(PX+BODX1,PY+BODY1,PX+BODX1+FOTX2,PY+BODY1+FOTY2);
  93.         LINE_P(PX,PY+10,PX+HADX1,PY+HADY1);
  94.         LINE_P(PX,PY+10,PX+HADX2,PY+HADY2);
  95. 
  96.         ARC_P(G0,EX,EY,6,0,359,0);
  97.         LINE_P(EX,EY+6,EX+0,EY+24);  
  98. LINE_P(EX+0,EY+24,EX+0+-10,EY+24+12);
  99. LINE_P(EX+0,EY+24,EX+0+10,EY+24+12);
  100. 
  101.         LINE_P(EX,EY+10,EX-10,EY+12);
  102.         LINE_P(EX,EY+10,EX+10,EY+12);
  103.         -10=HADX1;
  104.         12=HADY1;
  105.         10=HADX2;
  106.         12=HADY2;
  107.         -10=FOTX1;
  108.         12=FOTY1;
  109.         10=FOTX2;
  110.         12=FOTY2;
  111.         0=BODX1;
  112.         24=BODY1;
  113. 
  114.         IF EX>PX THEN
  115.           EX-RANDOM(INDE1)=EX;
  116.         ELSE
  117.           EX+RANDOM(INDE1)=EX;
  118.         END;
  119.         GETKEY()=INDE2;
  120.         IF INDE2 == 7 AND JMp≤2 THEN
  121.           PY-36=PY;RECT;HADY1+12=HADY1;
  122.           WAIT(.01);
  123.           JMp+1=JMp;
  124.         END;
  125.         IF PX+15≥EX AND PX-15≤EX AND EY-45≤PY AND EY+45≥PY THEN
  126.           IF INDE2==11 THEN
  127. FX(EX,2,Y+.1)=EX;HADY2+32=HADY2;
  128.             FY(EY,-2,1)-20-.005Y=EY;
  129.             Y+12=Y;
  130.           END;
  131.           IF INDE2==12 THEN
  132.             FX(EX,4,Y)=EX;FOTY1+32=HADY1;
  133.             FY(EY,36,2)+.1Y=EY;
  134.             Y+8=Y;
  135.           END;
  136.           IF INDE2==13 THEN
  137.          
  138.           END;
  139.           IF ROUND(RANDOM(1),0) THEN
  140.             FY(PY,24,1)=PY;
  141.             X+4=X;
  142.           END;
  143.         END;
  144.         IF INDE2 == 15 THEN
  145.           HADY2+30=HADY2;PY+28=PY;
  146.         END;
  147.         
  148.         IF INDE2==10 THEN
  149.    
  150.           Xs+1=Xs;  
  151.           FOTX1+8=FOTX1;
  152.         END;
  153.         IF INDE2==14 THEN
  154.    
  155.           Xs-1=Xs;
  156.           FOTX2-8=FOTX2;
  157.         END;
  158.         Xs*.9=Xs;
  159.         Xs+PX=PX;
  160.         IF PY<72 OR PY>127 OR 30>PX OR PX>226 THEN
  161.           PY+INDE1+1=PY;
  162.         END;
  163.         IF EY<72 OR EY>127 OR 30>EX OR EX>226 THEN
  164.           EY+3=EY;
  165.         END;
  166.         IF EY>110 THEN
  167.           EY-2-6/9=EY;
  168.         END;
  169.         IF INDE2==50 THEN
  170.           TEXTOUT("PAUSE",0,0,0);WAIT; END;
  171.       UNTIL -40>EY OR EY>127 OR -40>PY OR PY>127 OR -44>EX OR EX>300 OR -44>PX OR PX>300;
  172.       All+1=All;
  173.       TEXTOUT("Game!",0,0,2,0);
  174.       IF -44>EX OR EX>300 OR -40>EY OR EY>127 THEN
  175.         Win+1=Win;
  176.       FOR I FROM 0 TO 64 DO
  177.         ARC_P(EX,EY,I);WAIT(.01)END;
  178.         TEXTOUT("+1",0,-1,1,0);
  179.       ELSE
  180.         FOR I FROM 0 TO 48 DO
  181.         ARC_P(PX,PY,I);WAIT(.01)END;
  182.       END;
  183.       WAIT(1);
  184.     END;
  185.   END;
  186. END;
复制代码



您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-5-2 05:40 , Processed in 0.057305 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表