Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Tekoäly

Sivun loppuun

Jogge [11.08.2002 22:28:47]

#

Tässä esimerkissä 2 sekoälyä ottaa mittaa toisistaan yrittämällä päästä kentän oikeaan alareunaan. Tästä voi, saa ja pitää tehdä parempi, jos joku haluaa tuhlata aikansa siihen...

Edit: Pistin sisennykset.

RANDOMIZE TIMER
DIM s(1 TO 4)
DIM s2(1 TO 4)
WIDTH 80, 50
CLS
PRINT STRING$(80, 219)
LOCATE 48, 1
PRINT STRING$(80, 219)
FOR a = 1 TO 48
  LOCATE a, 1
  PRINT CHR$(219)
NEXT
FOR a = 1 TO 48
  LOCATE a, 80
  PRINT CHR$(219)
NEXT

FOR a = 1 TO 1000
  LOCATE INT(RND * 47) + 1, INT(RND * 79) + 1: PRINT CHR$(219)
NEXT
COLOR 14
LOCATE 47, 79: PRINT CHR$(4)
COLOR 7
x = 2
y = 2
xx = 2
yy = 2
x2 = 2
y2 = 2
xx2 = 2
yy2 = 2

1

  FOR toot = 1 TO 3
    DO: LOOP UNTIL (INP(&H3DA) AND &H8) = 0
    DO: LOOP UNTIL (INP(&H3DA) AND &H8) <> 0
  NEXT

  FOR a = 1 TO 90 - x
    IF SCREEN(y, x + a) = 219 THEN s(1) = a - 1: EXIT FOR
  NEXT

  FOR a = 1 TO 48 - y
    IF SCREEN(y + a, x) = 219 THEN s(2) = a - 1: EXIT FOR
  NEXT

  FOR a = 1 TO x - 1
    IF SCREEN(y, x - a) = 219 THEN s(3) = a - 1: EXIT FOR
  NEXT

  FOR a = 1 TO y - 1
    IF SCREEN(y - a, x) = 219 THEN s(4) = a - 1: EXIT FOR
  NEXT

  REDIM temp(1 TO 4)
  REDIM top(1 TO 4)


  FOR a = 1 TO 4
    temp(a) = s(a)
  NEXT a

  FOR kierros = 1 TO 4
    big = 0

    FOR haku = 1 TO 4
      IF temp(haku) >= big THEN kuka = haku: big = temp(haku)
    NEXT haku

    top(kierros) = kuka

    temp(kuka) = -1
  NEXT kierros

  IF s(top(1)) = 0 THEN r = 0
  r = top(1)

  IF CINT(RND * 1) = 0 AND s(2) > 0 AND y < 47 THEN r = 2
  IF CINT(RND * 1) = 0 AND s(1) > 0 AND x < 79 THEN r = 1
  IF INT(RND * 10) = 5 AND s(top(2)) > 0 THEN r = top(2)

  IF rr = 1 AND r = 3 AND s(top(3)) > 0 THEN r = top(CINT(RND) + 2)
  IF rr = 2 AND r = 4 AND s(top(3)) > 0 THEN r = top(CINT(RND) + 2)
  IF rr = 3 AND r = 1 AND s(top(3)) > 0 THEN r = top(CINT(RND) + 2)
  IF rr = 4 AND r = 2 AND s(top(3)) > 0 THEN r = top(CINT(RND) + 2)

  IF r = 1 THEN x = x + 1
  IF r = 2 THEN y = y + 1
  IF r = 3 THEN x = x - 1
  IF r = 4 THEN y = y - 1

  IF y = 47 AND x = 79 THEN BEEP: END

  LOCATE yy, xx: PRINT " "
  LOCATE y, x: PRINT CHR$(1)
  xx = x
  yy = y
  rr = r

  GOSUB tekoaly2
GOTO 1

tekoaly2:


  FOR a = 1 TO 90 - x2
    IF SCREEN(y2, x2 + a) = 219 THEN s2(1) = a - 1: EXIT FOR
  NEXT

  FOR a = 1 TO 48 - y2
    IF SCREEN(y2 + a, x2) = 219 THEN s2(2) = a - 1: EXIT FOR
  NEXT

  FOR a = 1 TO x2 - 1
    IF SCREEN(y2, x2 - a) = 219 THEN s2(3) = a - 1: EXIT FOR
  NEXT

  FOR a = 1 TO y2 - 1
    IF SCREEN(y2 - a, x2) = 219 THEN s2(4) = a - 1: EXIT FOR
  NEXT

  REDIM temp(1 TO 4)
  REDIM top(1 TO 4)


  FOR a = 1 TO 4
    temp(a) = s2(a)
  NEXT a

  FOR kierros = 1 TO 4
    big = 0

    FOR haku = 1 TO 4
      IF temp(haku) >= big THEN kuka = haku: big = temp(haku)
    NEXT haku

    top(kierros) = kuka

    temp(kuka) = -1
  NEXT kierros

  IF s2(top(1)) = 0 THEN r2 = 0
  r2 = top(1)

  IF CINT(RND * 1) = 1 AND s2(2) > 0 AND y2 < 47 THEN r2 = 2
  IF CINT(RND * 1) = 1 AND s2(1) > 0 AND x2 < 79 THEN r2 = 1
  IF INT(RND * 1) = 5 AND s2(top(2)) > 0 THEN r2 = top(2)


  IF rr2 = 1 AND r2 = 3 AND s2(top(3)) > 0 THEN r2 = top(CINT(RND) + 2)
  IF rr2 = 2 AND r2 = 4 AND s2(top(3)) > 0 THEN r2 = top(CINT(RND) + 2)
  IF rr2 = 3 AND r2 = 1 AND s2(top(3)) > 0 THEN r2 = top(CINT(RND) + 2)
  IF rr2 = 4 AND r2 = 2 AND s2(top(3)) > 0 THEN r2 = top(CINT(RND) + 2)


  IF r2 = 1 THEN x2 = x2 + 1
  IF r2 = 2 THEN y2 = y2 + 1
  IF r2 = 3 THEN x2 = x2 - 1
  IF r2 = 4 THEN y2 = y2 - 1

  IF y2 = 47 AND x2 = 79 THEN BEEP: END

  LOCATE yy2, xx2: PRINT " "
  LOCATE y2, x2: PRINT CHR$(2)
  xx2 = x2
  yy2 = y2
  rr2 = r2

RETURN

TH [12.08.2002 12:56:10]

#

Hyvä koodi!

Antti Laaksonen [12.08.2002 15:05:28]

#

Mielenkiintoinen ohjelma, kestää useamman katselukerran.

snakari [12.08.2002 17:47:36]

#

on kyllä hiano!

(nimetön) [12.08.2002 18:24:13]

#

Hyvä koodi, mutta ne pisteet liikkuu liian nopeasti. Niiden seikkailuja siellä sokkeloissa ei oikein ehdi seuraamaan. Myös semmoinen aliohjelma (jos se nyt semmoinen on :))olisi hyvä, joka arpoisi joka kerta uuden sokkelon. Taitaisi kuitenkin olla aika hankala tehdä :)

Jogge [12.08.2002 18:35:58]

#

Hidastusta voi säätää muuttamalla tämän for silmukan arvoa (joka on nyt 3):
FOR toot = 1 TO 3
DO: LOOP UNTIL (INP(&H3DA) AND &H8) = 0
DO: LOOP UNTIL (INP(&H3DA) AND &H8) <> 0
NEXT

Sen kyllä pitäisi ainakin arpoa joka kerta uusi sokkelo (sotku). Kai kopioit myös sen RANDOMIZE TIMERin?

(nimetön) [12.08.2002 18:54:02]

#

Hups, kyllähän se arpookin :) Katsoin sen vain kaksi kertaa, enkä katsonut, että se arpoo ne :)

thefox [13.08.2002 14:58:25]

#

Todella hieno itseasiassa jopa! =)
Sisennyksiä jäin jälleen kaipaamaan.. ;)

pushpabon [13.08.2002 16:31:55]

#

Hidastus hoituu myös näin:

hidastus = TIMER
DO
LOOP UNTIL TIMER => hidastus + .15

tietenkään se ei toimi joka koneella jos eri koneissa on eri timer nopeus. En kyllä tiedä onko. Ja antti, luo mailisi...

Jogge [13.08.2002 17:02:41]

#

Timerin nopeus on joka koneessa sama. Tiedän kyllä tuon timer hidastuksen, mutta se ei aina ole paras mahdollinen tapa tehdä hidastus...

Yo-guy [13.08.2002 17:51:02]

#

Hyvä ohjelma, ainoastaan joskus molemmat juuttuvat heti alkuun, mutta se ei haittaa! :-)

Jogge [13.08.2002 19:17:35]

#

Teinkin korjauksen siihen, mutta olinkin unohtanut tallentaa :P

Imbator [13.08.2002 21:01:26]

#

Todella hyvä ohjelma. Kiva vaikka näytönsäästäjänä

Toni_ [18.08.2002 17:28:11]

#

Hieno koodi tosin jos ne äijät juuttuu nii ei ole lopetusnappia.

Jogge [19.08.2002 18:49:33]

#

paina ctrl + pausee niin eiköhän toimi...

Antti [05.09.2002 14:52:44]

#

Luin jostain 95- Mikrobitistä pelistä nimeltä Ned's World. Siinä ohjattiin pientä pistettä, Nediä, joka meni tommoisia sokkeloita ja sitä piti opettaa, mitä pitää tehdä aina tietyssä tilanteessa. Eräänlainen neuroverkko-peli siis. Kävi vain mielesssä...

Mv [25.09.2002 22:24:07]

#

Tekoälyä tosiaankin. Ensimmäisellä kokeilukerrallani musta voitti ja toisella molemmat juutuivat kiinni. Mahtava ohjelma!

(nimetön) [26.09.2002 16:49:04]

#

Tosi hieno esimerkki!

Juuzo [28.09.2002 21:11:22]

#

Toimiihan toi

(nimetön) [06.10.2002 17:59:53]

#

vänkä

InvalidCo [04.04.2003 15:08:49]

#

Ihan hyvä ohjelma, värejä olisi kiva kun olisi vielä...ja kun en kerran laiskuuttani jaksanut tarkistaa koodia, niin onko tossa ohjelmassa vielä jonkinlainen tarkistus, että maaliin tosiaan on jokin reitti, josta pääsee (tuli vain mieleen kysyä...)

-The PC-Master-

Guru-X [03.05.2003 01:28:17]

#

Ton:
FOR toot = 1 TO 3
DO: LOOP UNTIL (INP(&H3DA) AND &H8) = 0
DO: LOOP UNTIL (INP(&H3DA) AND &H8) <> 0
NEXT
olisi voinut korvata lyhyemmällä:
FOR toot = 1 TO 3
WAIT &H3DA, 8
NEXT
mutta mitä väliä :)

tejeez [01.09.2003 20:58:42]

#

FOR toot = 1 TO 3
DO: LOOP WHILE INP(&H3DA) AND &H8
DO: LOOP UNTIL INP(&H3DA) AND &H8
NEXT

Fisher [17.04.2004 20:41:34]

#

vaikuttaa hyvältä

markus90 [04.01.2005 11:27:10]

#

Todella hyvä tekoäly.

eraggo [07.04.2005 07:18:09]

#

on hyvä vaikka katoin nyt...... :))

Wukkopi [29.08.2005 08:39:36]

#

kahdesti katsoin niin ensin se luola oli sellainen että maali oli umpikujassa niin ettei ollut mahdollisuuttakaan päästä sinne...
Toisella kerralla (heti perään) niillä sekoälyillä ei ollut kuin kaksi neliötä liikkuma varaa :D

Kaape [11.10.2006 20:48:50]

#

Onhan toi ihan hyvä, mut noi äijät jää vähän liian helppoihin paikkoihin jumiin.

Juhko [12.10.2006 13:25:14]

#

pushpabon kirjoitti:

hidastus = TIMER<br>DO<br>LOOP UNTIL TIMER => hidastus + .15<br>

Mä oon laittanu ton koodivinkkeihin erikseen.<br>

SUB XWAIT
  A = TIMER
  DO: LOOP UNTIL TIMER > A + .1
END SUB

Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta