YCalc=1.10 B0=\4'\y\nSetButton(1)\y\nCallSub( GetButtonData ) B1=\2ffffff\3909090\4'startrek version 0.10\y\nif( msg("start program ?") == 0 ){ stop }\y\nnew\y\n'********** global variable **********\y\nglobal g_qmap[64], g_smap[64], g_imap[64]\y\nglobal k_number, b_number\y\nglobal e_qpos, e_spos, e_energy, e_torpedoes\y\nglobal e_st[7]\y\nglobal g_limit, s_mode\y\n\y\n'********** sub input **********\y\nsub s_input(md) {\y\n dim n\y\n while(1){\y\n n = InputButton\y\n if(n >= 1) * (n <= 8) * (md == 0) { break }\y\n if(n == 31){ print 1 }\y\n if(n == 32){ print 2 }\y\n if(n == 33){ print 3 }\y\n if(n == 34){ print 4 }\y\n if(n == 35){ print 5 }\y\n if(n == 36){ print 6 }\y\n if(n == 37){ print 7 }\y\n if(n == 38){ print 8 }\y\n if(n == 39){ print 9 }\y\n if(n == 40){ print 0 }\y\n if(n == 41){ KeyDown(0x08) }\y\n if(n == 45){ n = Calc(GetCurrentLine) break }\y\n }\y\n return(n)\y\n}\y\n\y\n'********** set screen **********\y\nsub m_set_screen {\y\n' screen(400, 300)\y\n SetFontName("MS ゴシック")\y\n}\y\n\y\n'********** calc sin deg **********\y\nsub c_sin(c, d, x){\y\n dim a\y\n a = sin(c * 0.01745329251) * d + x\y\n a = round(a, 0)\y\n return(a)\y\n}\y\n\y\n'********** calc cos deg **********\y\nsub c_cos(c, d, y){\y\n dim a\y\n a = -cos(c * 0.01745329251) * d + y\y\n a = round(a, 0)\y\n return(a)\y\n}\y\n\y\n'********** set qmap **********\y\nsub m_set_qmap {\y\n dim n, m, k\y\n\y\n 'set star\y\n n=0\y\n while(n < 64){\y\n g_qmap[n] = rnd(9) + 1\y\n n = n + 1\y\n }\y\n\y\n 'set base\y\n n=3\y\n while(n > 0){\y\n m = rnd(64)\y\n if(g_qmap[m] < 10){\y\n g_qmap[m] = g_qmap[m] + 10\y\n b_number = b_number + 1\y\n n = n - 1\y\n }\y\n }\y\n\y\n 'set klingon\y\n n=30\y\n while(n > 0){\y\n m = rnd(64)\y\n if(g_qmap[m] < 100){\y\n k = rnd(5) + 1\y\n g_qmap[m] = g_qmap[m] + k * 100\y\n k_number = k_number + k\y\n n = n - k\y\n }\y\n }\y\n\y\n 'set secret\y\n n=0\y\n while(n < 64){\y\n g_qmap[n] = g_qmap[n] + 1000\y\n n = n + 1\y\n }\y\n\y\n 'set enterprize data\y\n e_qpos = rnd(64)\y\n e_spos = rnd(64)\y\n\y\n e_energy = 4000\y\n e_torpedoes = 10\y\n g_limit = 0\y\n s_mode = 0\y\n}\y\n\y\n'********** set smap **********\y\nsub m_set_smap {\y\n dim n, m, k\y\n\y\n 'clear smap\y\n n=0\y\n while(n < 64){\y\n g_smap[n] = 0\y\n n = n + 1\y\n }\y\n\y\n 'get qmap data\y\n g_qmap[e_qpos] = mod(g_qmap[e_qpos], 1000)\y\n\y\n 'set enterprize\y\n g_smap[e_spos] = 1000\y\n\y\n 'set klingon\y\n n = int(mod(g_qmap[e_qpos], 1000) / 100)\y\n while(n > 0){\y\n m = rnd(64)\y\n if(g_smap[m] == 0){\y\n g_smap[m] = 100\y\n g_imap[m] = rnd(160) + 160\y\n n = n - 1\y\n }\y\n }\y\n\y\n 'set base\y\n n = int(mod(g_qmap[e_qpos], 100) / 10)\y\n while(n > 0){\y\n m = rnd(64)\y\n if(g_smap[m] == 0){\y\n g_smap[m] = 10\y\n n = n - 1\y\n }\y\n }\y\n\y\n 'set star\y\n n = int(mod(g_qmap[e_qpos], 10))\y\n while(n > 0){\y\n m = rnd(64)\y\n if(g_smap[m] == 0){\y\n g_smap[m] = 1\y\n n = n - 1\y\n }\y\n }\y\n\y\n}\y\n\y\n'********** disp enterprize position **********\y\nsub s_dsp_epos {\y\n\y\n print "Enterprize in Q(", \y\n mod(e_qpos, 8) + 1, ",", int(e_qpos / 8) + 1, ") S(",\y\n mod(e_spos, 8) + 1, ",", int(e_spos / 8) + 1, ")\n"\y\n}\y\n\y\n'********** check starbase **********\y\nsub s_chk_base {\y\n dim x, y\y\n\y\n y = int(e_spos / 8) - 1\y\n while(y < int(e_spos / 8) + 2){\y\n x = mod(e_spos, 8) - 1\y\n while( x < mod(e_spos, 8) + 2){\y\n if((x < 0) + (x > 7) + (y < 0) + (y > 7) == 0){\y\n if g_smap[y * 8 + x] == 10 {\y\n return(1)\y\n }\y\n }\y\n x = x + 1\y\n }\y\n y = y + 1\y\n }\y\n return(0)\y\n}\y\n\y\n'********** dsp device **********\y\nsub s_dsp_device(n) {\y\n dim m\y\n\y\n if(n==0){ print "Short Range Sensor" }\y\n if(n==1){ print "Computer Display" }\y\n if(n==2){ print "Long Range Sensor" }\y\n if(n==3){ print "Phaser" }\y\n if(n==4){ print "Photon Torpedo Tubes" }\y\n if(n==5){ print "Warp Engine" }\y\n if(n==6){ print "Shield" }\y\n\y\n m = round(e_st[n] - g_limit, 2)\y\n if(m > 0){\y\n print " damaged,", m, " stardates estimated for repair\n"\y\n return(m)\y\n }\y\n else{\y\n return(0)\y\n }\y\n}\y\n\y\n'********** set damegi **********\y\nsub s_damegi(m) {\y\n dim n\y\n if(m == 0){\y\n if(rnd(6) == 0){\y\n print "\n** space storm **\n"\y\n }\y\n else { return }\y\n }\y\n if(e_st[6] > g_limit + 0.1) + (rnd(6) == 0){\y\n n = rnd(6)\y\n }\y\n else{\y\n n = 6\y\n }\y\n if(e_st[n] > g_limit){\y\n e_st[n] = e_st[n] + rnd(5) / 100\y\n }\y\n else{\y\n e_st[n] = g_limit + rnd(5) / 100\y\n }\y\n e_st[n] = round(e_st[n], 2)\y\n if(e_st[n] > g_limit){\y\n s_dsp_device(n)\y\n }\y\n\y\n}\y\n\y\n'********** dsp 1 map **********\y\nsub s_dspnum(n) {\y\n\y\n if(n < 1000){\y\n if(int(n / 100) == 0){\y\n if(int(n / 10) == 0){\y\n print " "\y\n }\y\n print " "\y\n }\y\n print " ", int(n)\y\n }\y\n else{\y\n print " ..."\y\n }\y\n}\y\n\y\n'********** main galaxy map **********\y\nsub m_gmap {\y\n dim n\y\n\y\n cls\y\n s_dsp_epos\y\n n = s_dsp_device(1)\y\n if(n > 0) { return }\y\n\y\n print " of Galaxy Map\n"\y\n n = 0\y\n while(n < 64){\y\n if(mod(n, 8) == 0){\y\n print int(n / 8) + 1\y\n }\y\n s_dspnum(g_qmap[n])\y\n if(mod(n + 1, 8) == 0){ print "\n" }\y\n n = n + 1\y\n }\y\n print " 1 2 3 4 5 6 7 8\n"\y\n\y\n}\y\n'********** main long range sensor **********\y\nsub m_long {\y\n dim n, x, y\y\n\y\n cls\y\n s_dsp_epos\y\n n = s_dsp_device(2)\y\n if(n > 0) { return }\y\n\y\n print "\n"\y\n y = int(e_qpos / 8) - 1\y\n while(y < int(e_qpos / 8) + 2){\y\n x = mod(e_qpos, 8) - 1\y\n while( x < mod(e_qpos, 8) + 2){\y\n if((x < 0) + (x > 7) + (y < 0) + (y > 7)){\y\n print " ..."\y\n }\y\n else{\y\n g_qmap[y * 8 + x] = mod(g_qmap[y * 8 + x], 1000)\y\n s_dspnum(g_qmap[y * 8 + x])\y\n }\y\n x = x + 1\y\n }\y\n y = y + 1\y\n print "\n"\y\n }\y\n\y\n}\y\n\y\n'********** main short range sensor **********\y\nsub m_short {\y\n dim n\y\n\y\n cls\y\n s_dsp_epos\y\n n = s_dsp_device(0)\y\n if(n > 0) { return }\y\n\y\n print "\n"\y\n if(s_mode == 0){\y\n m_set_smap\y\n s_mode = 1\y\n }\y\n n = 0\y\n while(n < 64){\y\n if(mod(n, 8) == 0){\y\n print int(n / 8) + 1\y\n }\y\n if(g_smap[n] == 1000){ print " E" }\y\n if(g_smap[n] == 100) { print " K" }\y\n if(g_smap[n] == 10) { print " B" }\y\n if(g_smap[n] == 1) { print " *" }\y\n if(g_smap[n] == 0) { print " ." }\y\n\y\n if(mod(n + 1, 8) == 0){ print "\n" }\y\n n = n + 1\y\n }\y\n print " 1 2 3 4 5 6 7 8\n"\y\n\y\n}\y\n\y\n'********** main warp engine **********\y\nsub m_worp {\y\n dim n, d, c, ex, ey, x, y\y\n\y\n print "\n"\y\n s_dsp_epos\y\n n = s_dsp_device(5)\y\n if(n > 0) { g_limit = g_limit + n return }\y\n\y\n print "\n"\y\n print "Sector distance?\n"\y\n d = s_input(1)\y\n print "\n"\y\n if(d < 1) {return}\y\n if(d > 91){\y\n print "Spock: Are you sure captain ???\n"\y\n d = 91\y\n }\y\n if(e_energy < int(d * d / 2)){\y\n print "Scotty: Sir, we do not have the energy.\n"\y\n return\y\n }\y\n\y\n print "course? (0-360)\n"\y\n c = s_input(1)\y\n print "\n"\y\n if (c < 0) + (c > 360) { return }\y\n\y\n g_limit = g_limit + int(sqr(d * 2)) * 0.01\y\n e_energy = e_energy - int(d * d / 2)\y\n\y\n g_smap[e_spos] = 0\y\n ex = mod(e_spos, 8)\y\n ey = int(e_spos / 8)\y\n n = 0\y\n while(n < d){\y\n n = n + 1\y\n x = c_sin(c, n, ex)\y\n y = c_cos(c, n, ey)\y\n if(x < 0) + (x > 7) + (y < 0) + (y > 7){\y\n s_mode = 0\y\n x = c_sin(c, d, ex)\y\n y = c_cos(c, d, ey)\y\n\y\n ex = mod(x, 8)\y\n if(ex < 0){ex = ex + 8}\y\n ey = mod(y, 8)\y\n if(ey < 0){ey = ey + 8}\y\n e_spos = ey * 8 + ex\y\n\y\n x = mod(e_qpos, 8) + int(x / 8)\y\n y = int(e_qpos / 8) + int(y / 8)\y\n if(x < 0) + (x > 7) + (y < 0) + (y > 7){\y\n print "** You wandered outside of the galaxy **\n"\y\n e_qpos = rnd(64)\y\n return\y\n }\y\n e_qpos = y * 8 + x\y\n break\y\n }\y\n if(g_smap[y * 8 + x] > 0){\y\n print "** emergency stop **\n",\y\n "Spock: To error is human\n"\y\n break\y\n }\y\n e_spos = y * 8 + x\y\n }\y\n\y\n g_smap[e_spos] = 1000\y\n if(s_mode == 0){\y\n m_set_smap\y\n s_mode = 1\y\n }\y\n\y\n if(s_chk_base == 1){\y\n print "Sulu: Capteain, we are docked at starbase.\n"\y\n e_energy = 4000\y\n e_torpedoes = 10\y\n g_limit = round(g_limit, 2)\y\n n = 0\y\n while(n < 7){\y\n e_st[n] = g_limit\y\n n = n + 1\y\n }\y\n }\y\n else{\y\n s_damegi(0)\y\n }\y\n\y\n}\y\n\y\n'********** main photon torpedo tubes **********\y\nsub m_torpedo {\y\n dim n, d, c, ex, ey, x, y, wx, wy\y\n\y\n g_limit = g_limit + 0.01\y\n print "\n"\y\n s_dsp_epos\y\n n = s_dsp_device(4)\y\n if(n > 0) { return }\y\n\y\n print "\n"\y\n if(e_torpedoes == 0){print "empty\n" return}\y\n print "loaded\n"\y\n\y\n print "course? (0-360)\n"\y\n c = s_input(1)\y\n if((c < 0) + (c > 360)){ return }\y\n\y\n print "\ntorpedo track\n"\y\n e_torpedoes = e_torpedoes - 1\y\n\y\n ex = mod(e_spos, 8)\y\n ey = int(e_spos / 8)\y\n wx = -1\y\n wy = -1\y\n n = 0\y\n while(n < 12){\y\n n = n + 1\y\n x = c_sin(c, n, ex)\y\n y = c_cos(c, n, ey)\y\n if(x < 0) + (x > 7) + (y < 0) + (y > 7){\y\n print "missed\n"\y\n break\y\n }\y\n if(x != wx) + (y != wy){\y\n wx = x\y\n wy = y\y\n print " ", x + 1, ",", y + 1, " "\y\n }\y\n if(g_smap[y * 8 + x] == 1){\y\n print "hit star\n"\y\n if(rnd(6) < 3){print "star absorbed\n" break}\y\n print "star destroyed\n"\y\n g_smap[y * 8 + x] = 0\y\n g_qmap[e_qpos] = g_qmap[e_qpos] - 1\y\n break\y\n }\y\n if(g_smap[y * 8 + x] == 10){\y\n print "starbase destroyed\n",\y\n "Spock: I often find human behaviour fascinating.\n"\y\n g_smap[y * 8 + x] = 0\y\n g_qmap[e_qpos] = g_qmap[e_qpos] - 10\y\n b_number = b_number - 1\y\n break\y\n }\y\n if(g_smap[y * 8 + x] == 100){\y\n print "klingon at S(", x + 1, ",", y + 1, ") ",\y\n "** destroyed **\n"\y\n g_smap[y * 8 + x] = 0\y\n g_qmap[e_qpos] = g_qmap[e_qpos] - 100\y\n k_number = k_number - 1\y\n break\y\n }\y\n }\y\n}\y\n\y\n'********** main phaser **********\y\nsub m_phasers {\y\n dim n, e, k, ex, ey, kx, ky, d, a\y\n\y\n g_limit = g_limit + 0.01\y\n print "\n"\y\n s_dsp_epos\y\n n = s_dsp_device(3)\y\n if(n > 0) { return }\y\n\y\n print "\n"\y\n print "energized ", e_energy, "\n"\y\n print "What units to fire?\n"\y\n e = s_input(1)\y\n print "\n"\y\n if((e < 0) + (e > e_energy)){ return }\y\n e_energy = e_energy - e\y\n if e >1090 {\y\n print "over loased\n"\y\n if(e_st[3] > g_limit){\y\n e_st[3] = e_st[3] + 0.05\y\n }\y\n else{\y\n e_st[3] = g_limit + 0.05\y\n }\y\n s_dsp_device(3)\y\n e = 90\y\n }\y\n k = int(mod(g_qmap[e_qpos], 1000) / 100)\y\n if(k == 0){\y\n print "Phaser fired at empty space.\n"\y\n return\y\n }\y\n ex = mod(e_spos, 8) + 1\y\n ey = int(e_spos / 8) + 1\y\n n = 0\y\n while(n < 64){\y\n if(g_smap[n] == 100){\y\n kx = mod(n, 8) + 1\y\n ky = int(n / 8) + 1\y\n d = sqr((ex - kx) * (ex - kx) + (ey - ky) * (ey - ky))\y\n a = int((e / k) / (1 + (d - 1)/10))\y\n print a, " units hit Klingon at S(", kx, ",", ky, ") "\y\n g_imap[n] = g_imap[n] - a\y\n if(g_imap[n] > 0){\y\n print "** damaged **\n"\y\n }\y\n else{\y\n print "** destroyed **\n"\y\n g_smap[n] = 0\y\n g_qmap[e_qpos] = g_qmap[e_qpos] - 100\y\n k_number = k_number - 1\y\n }\y\n }\y\n n = n + 1\y\n }\y\n}\y\n\y\n'********** main status report **********\y\nsub m_report {\y\n dim n, s$\y\n\y\n cls\y\n print "Status Report\n"\y\n print "star date ", g_limit + 3200, " time left ", round(3 - g_limit, 2), "\n"\y\n\y\n s$ = "green"\y\n if(e_energy < 1000) { s$ = "yellow" }\y\n if(s_chk_base == 1) { s$ = "docked" }\y\n if(mod(g_qmap[e_qpos], 1000) > 99) {s$ = "red" }\y\n print "condition ", s$, "\n"\y\n\y\n s_dsp_epos\y\n print "energy ", e_energy, "\n"\y\n print "torpedoes ", e_torpedoes, "\n"\y\n print "klingons left ", k_number, "\n"\y\n print "starbases ", b_number, "\n"\y\n\y\n n = 7\y\n while(n > 0){\y\n n = n - 1\y\n if(e_st[n] > g_limit){ s_dsp_device(n) }\y\n }\y\n}\y\n\y\n'********** main m_klingon **********\y\nsub m_klingons {\y\n dim n\y\n\y\n n = int(mod(g_qmap[e_qpos], 1000) / 100)\y\n if( n == 0){ return }\y\n\y\n print "Klingon attack\n"\y\n n =int(mod(g_qmap[e_qpos], 100) / 10)\y\n if( n > 0 ){\y\n print "Starbase protects enterprise\n"\y\n }\y\n n = 0\y\n while(n < 64){\y\n if(g_smap[n] == 100){\y\n print g_imap[n], \y\n " units hit from Klingon at S(", \y\n mod(n, 8) + 1, ",", int(n / 8) + 1, ")\n"\y\n e_energy = e_energy - g_imap[n]\y\n }\y\n n = n + 1\y\n }\y\n s_damegi(1)\y\n print "\n"\y\n if(e_energy < 0){ print "\n bang\n\n" }\y\n}\y\n\y\n'********** sub result **********\y\nsub s_result(w) {\y\n dim m\y\n m = 0\y\n print "\n"\y\n if(g_limit > w){ m_klingons }\y\n if(k_number == 0){\y\n print "Mission accomplished.\n\n"\y\n m = 1\y\n }\y\n if(e_energy < 1){\y\n print "Enterprize destroyed.\n\n"\y\n m = 1\y\n }\y\n g_limit = round(g_limit, 2)\y\n if(g_limit >= 3){\y\n print "It's too late\n"\y\n print "The federation has been conquered.\n\n"\y\n m = 1\y\n }\y\n if(m == 0){\y\n print "Command?\n"\y\n }\y\n}\y\n\y\n'********** command **********\y\nsub m_command(n) {\y\n dim w\y\n w = g_limit\y\n if(e_energy > 1) * (g_limit < 3){\y\n if(n == 1){ m_worp }\y\n if(n == 2){ m_phasers }\y\n if(n == 3){ m_torpedo }\y\n }\y\n if(n == 4){ m_short }\y\n if(n == 5){ m_long }\y\n if(n == 6){ m_gmap }\y\n if(n == 7){ m_report }\y\n s_result(w)\y\n}\y\n\y\n'********** main program **********\y\nsub m_main {\y\n m_set_screen\y\n m_set_qmap\y\n cls\y\n print "Stardate 2300, your mission is \n"\y\n print "to destroy ", k_number, " Klingons in 3 stardates.\n"\y\n print "There are " , b_number, " starbases.\n"\y\n s_result(g_limit)\y\n}\y\n\y\n'********** program start **********\y\nm_main\y\n\y\n\y\n B2=\1Warp Engine\200ffff\4'\y\nm_command( 1 ) B3=\1Phaser\200ffff\4'\y\nm_command( 2 ) B4=\1Photon Torpedo Tubes\200ffff\4'\y\nm_command( 3 ) B5=\1Short Range Sensor\200ffff\4'\y\nm_command( 4 ) B6=\1Long Range Sensor\200ffff\4'\y\nm_command( 5 ) B7=\1Galaxy Map\200ffff\4'\y\nm_command( 6 ) B8=\1Status Report\200ffff\4'\y\nm_command( 7 ) B9=\4'\y\nSetFontName("MS ゴシック")\y\nSetFontSize(11) B10= B11=\1F\2ffffff\300d0d0\4'Option\y\nDispOption B12= B13=\1MC\2ffffff\4'Memory Clear\y\nSetButton(12)\y\nSetButtonData("") B14=\1M-\2ffffff\4'Memory Sub\y\ndim n, a$\y\nSetButton(12)\y\nn = Val(GetButtonData)\y\nn = n - Calc(GetCurrentLine)\y\na$ = Str(n)\y\nSetButtonData(a$)\y\nSetNextLine\y\n B15=\1M+\2ffffff\4'Memory Add\y\ndim n, a$\y\nSetButton(12)\y\nn = Val(GetButtonData)\y\nn = n + Calc(GetCurrentLine)\y\na$ = Str(n)\y\nSetButtonData(a$)\y\nSetNextLine\y\n B16= B17= B18=\1?\2ffffff\4'Help\y\nDispHelp B19=\1CP\2ffffff\4'Copy\y\nSetClipboard(Str(Calc(GetCurrentLine))) B20=\1CR\2ffffff\4\n B21= B22= B23= B24= B25= B26= B27= B28= B29= B30= B31=\2ffffff\3b0b0b0\41 B32=\2ffffff\3b0b0b0\42 B33=\2ffffff\3b0b0b0\43 B34=\2ffffff\3b0b0b0\44 B35=\2ffffff\3b0b0b0\45 B36=\2ffffff\3b0b0b0\46 B37=\2ffffff\3b0b0b0\47 B38=\2ffffff\3b0b0b0\48 B39=\2ffffff\3b0b0b0\49 B40=\2ffffff\3b0b0b0\40 B41=\1←\2ffffff\3909090\4'BackSpace\y\nKeyDown(0x08)\y\nKeyUp(0x08) B42=\2ffffff\3909090 B43=\2ffffff\3909090 B44=\3909090 B45=\2ffffff\3909090\4Exe B46= B47= B48= B49= B50= B51=\2ffffff\3909090\47 B52=\2ffffff\3909090\48 B53=\2ffffff\3909090\49 B54=\2ffffff\3b0b0b0\4/ B55=\1AC\2ffffff\30000b0\4'All Clear\y\ncls B56=\2ffffff\3909090\44 B57=\2ffffff\3909090\45 B58=\2ffffff\3909090\46 B59=\2ffffff\3b0b0b0\4* B60=\2ffffff\3b0b0b0\4( B61=\2ffffff\3909090\41 B62=\2ffffff\3909090\42 B63=\2ffffff\3909090\43 B64=\2ffffff\3b0b0b0\4- B65=\2ffffff\3b0b0b0\4) B66=\2ffffff\3909090\40 B67=\2ffffff\3909090\4. B68=\1←\2ffffff\3909090\4'BackSpace\y\nKeyDown(0x08) B69=\2ffffff\3b0b0b0\4+ B70=\1=\2ffffff\3b0b0b0\4ExecLine ButtonDispLine1=8 ButtonDispLine2=0 ButtonDispLine3=3 ButtonDispLine4=0 ButtonEditMode=1 DispWidth=320 DispHeight=57 UserName= UserID= FormColor=0