Team Ai
Datasetpublic

hschumann2/TempleOS-Source-Code

sourceHugging Faceupdated 1y agoView on Hugging Face
0likes847downloads
Rocket.txt206 linesDownload Raw Back to Games
1 2#define THRUST  1003 4Bool    blast_off;5CMass   m1, //Bottom of rocket6        m2; //Top of rocket7CSpring s;8 9#define ROCKET_HEIGHT   4010#define GROUND_Y        (GR_HEIGHT-3*FONT_HEIGHT)11 12 13  <1>/* Graphics Not Rendered in HTML */14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30/* Graphics Not Rendered in HTML */31 32CDC     *dc2;33 34U0 DrawIt(CTask *task,CDC *dc)35{36  I64 i,x,y,cx=GR_WIDTH/2,cy=GROUND_Y;37  Bool engine_on;38  F64 nozzle_angle,theta=Arg(m2.x-m1.x,m2.y-m1.y);39 40  Sprite3(dc,0,GROUND_Y,0,<2>);41 42  if (Bt(kbd.down_bitmap,SC_CURSOR_UP)) {43    nozzle_angle=0;44    engine_on=TRUE;45  } else if (Bt(kbd.down_bitmap,SC_CURSOR_LEFT)) {46    nozzle_angle=pi/8;47    engine_on=TRUE;48  } else if (Bt(kbd.down_bitmap,SC_CURSOR_RIGHT)) {49    nozzle_angle=-pi/8;50    engine_on=TRUE;51  } else52    engine_on=FALSE;53 54  if (engine_on) {55    x=m1.x-10*Cos(theta+nozzle_angle);56    y=m1.y-10*Sin(theta+nozzle_angle);57    for (i=0;i<6;i++) {58      if ((i^winmgr.updates)&1)59        dc->color=YELLOW;60      else61        dc->color=RED;62      GrLine(dc,cx+(m1.x+i*Cos(theta-pi/2)),cy-(m1.y+i*Sin(theta-pi/2)),cx+x,cy-y);63      GrLine(dc,cx+(m1.x+i*Cos(theta+pi/2)),cy-(m1.y+i*Sin(theta+pi/2)),cx+x,cy-y);64    }65 66    for (i=0;i<10;i++) {67      switch (RandU16&3) {68        case 0: dc2->color=WHITE;       break;69        case 1: dc2->color=LTGRAY;      break;70        case 2: dc2->color=DKGRAY;      break;71        case 3: dc2->color=BLACK;       break;72      }73      GrPlot(dc2,cx+(x+RandU16%12-6),cy-(y+RandU16%12-6));74    }75    Snd(22);76  } else77    Snd;78  Sprite3ZB(dc,cx+(m1.x+m2.x)/2,cy-(m1.y+m2.y)/2,0,<1>,-theta);79}80 81U0 MyDerivative(CMathODE *,F64,COrder2D3 *,COrder2D3 *)82{83  Bool engine_on;84  F64 nozzle_angle,theta=Arg(m2.state->x-m1.state->x,m2.state->y-m1.state->y);85 86  if (Bt(kbd.down_bitmap,SC_CURSOR_UP)) {87    nozzle_angle=0;88    engine_on=TRUE;89  } else if (Bt(kbd.down_bitmap,SC_CURSOR_LEFT)) {90    nozzle_angle=pi/8;91    engine_on=TRUE;92  } else if (Bt(kbd.down_bitmap,SC_CURSOR_RIGHT)) {93    nozzle_angle=-pi/8;94    engine_on=TRUE;95  } else96    engine_on=FALSE;97 98  if (engine_on) {99    m1.DstateDt->DxDt+=THRUST*Cos(theta+nozzle_angle);100    m1.DstateDt->DyDt+=THRUST*Sin(theta+nozzle_angle);101  }102  if (blast_off) {103    m1.DstateDt->DyDt-=25; //Gravity104    m2.DstateDt->DyDt-=25;105  }106}107 108U0 Init()109{110  DocClear;111  "$BG,LTCYAN$$GREEN$Up, Left, Right$FG$%h*c",ToI64(GROUND_Y/FONT_HEIGHT),'\n';112 113  blast_off=FALSE;114 115  //We don't clear que links.116  MemSet(&m1.start,0,offset(CMass.end)-offset(CMass.start));117  m1.y=0;118 119  MemSet(&m2.start,0,offset(CMass.end)-offset(CMass.start));120  m2.y=ROCKET_HEIGHT;121 122  MemSet(&s.start,0,offset(CSpring.end)-offset(CSpring.start));123  s.end1=&m1;124  s.end2=&m2;125  s.rest_len=ROCKET_HEIGHT;126  s.const=10000;127 128  DCFill;129}130 131U0 TaskEndCB()132{133  DCFill;134  SndTaskEndCB;135}136 137U0 Rocket()138{139  CMathODE *ode=ODENew(0,1e-2,ODEF_HAS_MASSES);140 141  SettingsPush; //See SettingsPush142  Fs->text_attr=YELLOW<<4+BLUE;143  MenuPush(144        "File {"145        "  Abort(,CH_SHIFT_ESC);"146        "  Exit(,CH_ESC);"147        "}"148        "Play {"149        "  Restart(,'\n');"150        "  Up(,,SC_CURSOR_UP);"151        "  UpLeft(,,SC_CURSOR_LEFT);"152        "  UpRight(,,SC_CURSOR_RIGHT);"153        "}"154        );155 156  AutoComplete;157  WinBorder;158  WinMax;159  DocCursor;160  DocClear;161  dc2=DCAlias;162  Fs->task_end_cb=&TaskEndCB;163 164  ode->derive=&MyDerivative;165  ode->drag_v2=0.002;166  ode->drag_v3=0.00001;167  ode->acceleration_limit=5e3;168 169  Init;170  QueIns(&m1,ode->last_mass);171  QueIns(&m2,ode->last_mass);172  QueIns(&s,ode->last_spring);173 174  QueIns(ode,Fs->last_ode);175 176  Fs->draw_it=&DrawIt;177 178  try {179    GetKey;180    blast_off=TRUE;181    while (TRUE) {182      switch (GetChar(,FALSE)) {183        case '\n':184          Init;185          GetKey;186          blast_off=TRUE;187          break;188        case CH_ESC:189        case CH_SHIFT_ESC:190          goto rk_done;191      }192    }193rk_done:194  } catch195    PutExcept;196  QueRem(ode);197  ODEDel(ode);198  DocClear;199  SettingsPop;200  DCFill;201  DCDel(dc2);202  MenuPop;203}204 205Rocket;206