Mede dankzij het 'Welke tools heb jij al gemaakt' topic had ik besloten om mijn Python te oefenen door een Bejeweled Blitz bot te schrijven.
Hij behaalt degelijke scores (~500k) maar loopt nog regelmatig vast op ongeldige moves en ik heb zo'n vermoeden dat het te maken heeft met de manier waarop ik een geldige move zoek en hoe ik over m'n speelveld loop.
Met ImageGrab maak 'k een screenshot van het speelveld, met getpixel haal ik er 64 pixels uit die ik gebruik om de kleur van de gems te bepalen. Ik steek ze in 'n zelfgemaakt Gem object dat de kleur en coords van de gem bijhoud.
Om op zoek te gaan naar een geldige move overloop ik mijn lijst en kijk voor iedere gem naar de omliggende gems om te zien of daar drie gelijke gems tussen zitten (en dit in verschillende patronen ... bijv xxox, xoxx etc). Ik ga de meeste weglaten uit mijn voorbeeldcode:
Het probleem is dus dat de bot een move zoals deze ziet, en doordat Python geen probleem heeft met negatieve indexen ziet hij hierin gewoon een geldige move: de gele is board[x][y] of meer specifiek board[5][0], de rode onderaan is board[x][y-1] of board[5][-1].

Iemand een idee om een check in te bouwen zodat hij geen negatieve indexen gebruikt?
Alvast bedankt!
Hij behaalt degelijke scores (~500k) maar loopt nog regelmatig vast op ongeldige moves en ik heb zo'n vermoeden dat het te maken heeft met de manier waarop ik een geldige move zoek en hoe ik over m'n speelveld loop.
Met ImageGrab maak 'k een screenshot van het speelveld, met getpixel haal ik er 64 pixels uit die ik gebruik om de kleur van de gems te bepalen. Ik steek ze in 'n zelfgemaakt Gem object dat de kleur en coords van de gem bijhoud.
code:
1
2
3
4
5
6
7
8
9
| board = [[0 for col in range(8)] for row in range(8)] for x in range(8): for y in range(8): gem = im.getpixel((gem_x,gem_y)) board[x][y] = Gem(determineColor(gem),(gem_x,gem_y)) gem_y += 40 gem_x += 40 gem_y = 23 |
Om op zoek te gaan naar een geldige move overloop ik mijn lijst en kijk voor iedere gem naar de omliggende gems om te zien of daar drie gelijke gems tussen zitten (en dit in verschillende patronen ... bijv xxox, xoxx etc). Ik ga de meeste weglaten uit mijn voorbeeldcode:
code:
1
2
3
4
5
6
7
8
9
| for x in range(8): for y in range(8): try: if board[x][y-2].color == board[x][y-1].color and board[x][y-1].color == board[x][y+1].color: makeMove(board[x][y].cords,board[x][y+1].cords) elif: (...) else: pass except IndexError: break |
Het probleem is dus dat de bot een move zoals deze ziet, en doordat Python geen probleem heeft met negatieve indexen ziet hij hierin gewoon een geldige move: de gele is board[x][y] of meer specifiek board[5][0], de rode onderaan is board[x][y-1] of board[5][-1].

Iemand een idee om een check in te bouwen zodat hij geen negatieve indexen gebruikt?
Alvast bedankt!
Desktop: i5 2500k @ 4Ghz, 4GB ram, GTX560Ti OC Laptop Dell XPS15 i5 2450, 4GB ram, GT525M, backlit keyb.