Högskolan på Åland serienummer 2013:42. Informationsteknik. Mariehamn 2013 ISSN

Storlek: px
Starta visningen från sidan:

Download "Högskolan på Åland serienummer 2013:42. Informationsteknik. Mariehamn 2013 ISSN 1458-1531"

Transkript

1 Nätpokerboten Mats Enqvist Högskolan på Åland serienummer 2013:42 Informationsteknik Mariehamn 2013 ISSN Mariehamn 2009

2 Examensarbete Högskolan på Åland Utbildningsprogram: Författare: Arbetets namn: Handledare: Uppdragsgivare: - Informationsteknik Mats Enqvist Nätpokerboten Agneta Eriksson-Granskog Abstrakt: Syftet med denna uppsats är att undersöka och utveckla olika metoder för att få en fungerande online pokerbot. En bot är ett automatiserat program som utför vad den blivit programmerad till att göra, utan att en användare behöver styra eller övervaka programmet. Även om det är en pokerbot som jag valt att fokusera på så är det meningen att uppsatsen skall ge en idé om hur man kunde automatisera andra program och inte bara ett pokerspel. Nyckelord (sökord): Robot, automation, minnesläsning, poker Högskolans serienummer: ISSN: Språk: Sidantal: 2013: Svenska 27 Inlämningsdatum: Presentationsdatum: Datum för godkännande:

3 Degree Thesis Högskolanpå Åland / Åland University of Applied Sciences Study program: Author: Title: Academic Supervisor: Technical Supervisor: - Information Technology Mats Enqvist Online poker bot Agneta Eriksson-Granskog Abstract: The purpose of this essay is to examine different methods to develop an online poker bot. A bot is a automated program that does what it has been programmed to do, without the need of control or supervision by the user. Even if the focus in this essay is poker, the point is to give an idea of how to automate other programs and not only a online poker game. Key words: Robot, automation, memory reading, poker Serial number: ISSN: Language: Number of pages: 2013: Swedish 27 Handed in: Date of presentation: Approved on:

4 INNEHÅLL 1. Inledning Motiv Syfte Metod Avgränsningar Spelet Texas hold'em Struktur och funktionalitet för pokerboten Åtkomst av data Skärmskrapning Exempel på skärmskrapning i Texas hold'em Minnesläsning Minnesläsning i Java Exempel: läsning av de gemensamma korten i pokerspelet Val av dataåtkomstmetod Kommunikation mot pokerklient Undvika upptäckt Metoder för att avslöja pokerbotar Speltid Timings Spionprogram i pokerklienten CAPTCHA Spelmönster Slutord Litteraturförteckning... 27

5 1. Inledning 1.1. Motiv Valet av en pokerbot är en kombination av flera intressen. Automation är ett intressant ämne och det är något som eftersträvas inom IT-branschen men även inom andra områden. Poker är något av ett fritidsintresse för mig och att utveckla en bot som automatiskt spelar poker kändes som en bra utmaning Syfte Syftet med detta arbete är att utveckla och dokumentera en pokerbot. En stor del av arbetet är att undersöka och testa olika metoder för att få boten att fungera. Även om jag valt att fokusera på en pokerbot är det meningen att uppsatsen skall ge en idé om hur man kan tillämpa dessa metoder och automatisera inom andra områden lika väl Metod Som programmeringsspråk kommer Java tillsammans med editorn NetBeans att användas. Valet kändes naturligt då jag har erfarenhet av Java och NetBeans men främst på grund av vissa inbyggda funktioner i Java, till exempel Robotklassen. Robotklassen innehåller funktionalitet såsom läsning av pixlar och styrning av mus och tangentbord som annars skulle vara tvunget att byggas upp från grunden eller lånas från externa bibliotek. Arbetssättet bygger på att undersöka teoretiskt, implementera och testa de olika metoderna som kan användas för att få funktionaliteten en pokerbot behöver för att fungera. Som litteratur används i första hand internet samt böcker inom området. 3

6 1.4. Avgränsningar På grund av projektets omfattning har vissa avgränsningar gjorts. En pokerbot kan göras på en hel del olika sätt och jag har valt att fokusera på gränssnittet från boten till omvärlden. Med andra ord hur boten tar reda på vad som händer i pokerprogrammet och hur den skall kommunicera tillbaka. En enkel pokerintelligens kommer att utvecklas för att testa boten i sin helhet men det är inget som kommer att nämnas i någon större utsträckning. Artificiell pokerintelligens är ett välstuderat området, teorier och studier kan hittas i mängder på nätet och böcker så jag valde därför att inte behandla det i uppsatsen. En del pokersidor förbjuder användningen av pokerbotar och därför kommer teorier för hur man undviker upptäckt att diskuteras och ligga i baktanke under utvecklingen av boten. Den här uppsatsen kommer inte ta någon ställning till användning av botar på sidor som förbjuder det. Eftersom det finns en hel del olika typer av pokerspel och ännu fler aktörer av online poker har jag valt att fokusera på ett specifikt spel, Texas hold'em, på en specifik pokersida. Att göra en pokerbot som kan spela olika spel på olika sidor skulle kräva oerhörda mängder av arbete. Men detta extra arbete skulle inte tillföra det här arbetet mycket eftersom det egentligen bara är små variationer som tas i beaktande från fall till fall och i grunden fungerar en pokerbot likadant oavsett spel eller vilken sida som används. 2. Spelet Texas hold'em För att förstå hur en pokerbot opererar och vad den skall klara av behövs lite pokerkunskap. Det finns flera olika pokerspel och ett av de populärare är Texas Hold'em (Glimne, 2005). Texas Hold'em är ursprungligen ett bordsspel men online versionen är i princip samma sak. Spelet finns i några varianter men alla fungerar på liknande sätt. Figur 1 visar en illustration av Texas hold'em. 4

7 Figur 1 Texas hold'em (Drm0hr, 2012) Texas Hold'em kan spelas med två till tio spelare. Spelet körs i omgångar, varje omgång börjar med att varje spelare tilldelas två kort. Dessa två kort kallas hålkort och spelarna får bara se sina egna kort. Dealerknappen (button i figuren) roteras medurs efter varje omgång. Spelarna direkt efter knappen måste betala en liten mörk och stor mörk (Small Blind och Big Blind i figuren). Spelaren efter stor mörk är alltid först att agera. Det finns fyra drag man kan göra: 1. Lägga sig. Detta gör man oftast om man har dåliga kort och inte vill vara med i omgången. 2. Syna. För att vara med i spelet måste man syna, alltså betala lika mycket som nuvarande insats ligger på. Om ingen har höjt insatsen är det stor mörk man måste betala. 3. Höja. Gillar man sina kort kan man höja insatsen. Då måste alla spelare som vill vara med betala samma insats. 4. Check. Om ingen har höjt insatsen kan t.ex. stor mörk välja att checka eftersom hon eller han redan betalat insatsen. När alla spelare antingen lagt sig eller synat kommer de första tre gemensamma korten. Dessa tre kort delas synliga och alla kan använda dessa kort för att bilda en pokerhand. En till runda av antingen checkar, höjningar, syn och läggningar görs och nästa 5

8 gemensamma kort delas ut. Ytterligare en omgång av samma val görs och sista kortet delas ut. Nu sker den sista omgången där man kan höja, checka, syna eller lägga sig. Om flera spelare är med i slutet visas korten och vinnaren avgörs. Vinnaren är den som har den starkaste femkortshanden av de fem synliga och de två egna hålkorten. Spelet behöver inte alltid komma så långt som till sista kortet och kan avgöras genom att få alla andra spelare att lägga sig. Då vinner man potten utan att behöva visa sina kort. Texas Hold'em fungerar likadant online och spelas oftast med ett pokerprogram som laddas ner från pokersidan man valt att spela på. Det grafiska gränssnittet i pokerklienten visar all information som finns tillgänglig och boten behöver läsa precis samma information som en person läser från pokerfönstret. Figur 2 nedan visar ett typiskt pokerfönster i en pokerklient. Vad en pokerbot behöver läsa från klienten beror på hur komplex den görs. En bot som bara lägger sig hela tiden behöver bara kolla när läggningsknappen går att trycka på. En mer avancerad bot vill så klart veta mycket mer än så. Följande information måste kunna läsas från pokerklienten: - Hålkorten och de gemensamma korten på bordet - Positionen av knappen - Hur många spelare som finns totalt på bordet - Hur många av dessa spelare som fortfarande är med i spelet - Potten (totala summan av insatserna) - Motståndarbeteende 6

9 Figur 2 Illustration av ett pokerfönster i en nätpokerklient Hålkorten (eller starthanden), de två korten som delas ut i början av rundan, måste läsas för att avgöra om det är värt att alls delta i omgången. Vad som är bra starthänder kan diskuteras men vissa händer har helt enkelt lägre chans att få en bättre hand än motståndarna. Positionen har en viktig roll i Texas Hold'em. Dealerknappens position avgör vem som är först att agera. Att agera sist är en stor fördel eftersom man får se vad alla andra gör före man själv gör sitt val. Antalet spelare som är med har en matematisk inverkan, ju fler spelare som är med ju större är chansen att någon har en bättre hand, vilket också påverkar hur spelet spelas. Om pokerboten inte är programmerad med strategier för varierat antal motståndare måste pokerboten byta bord eftersom strategier för ett spel mot en eller två motståndare skiljer sig avsevärt jämfört med ett fullt bord. 7

10 Även den totala pottstorleken har en matematiskt inverkan på spelet. Detta kan kanske enklast förklaras med ett exempel: Om den totala potten är 20 och någon höjer med ytterligare 20 måste 50% av den totala pottstorleken betalas för att fortsätta i spelet, om chansen att vinna är mindre än 50% är det då inte värt att fortsätta eftersom det helt enkelt inte kommer att vara lönsamt i längden att spela. Att följa med vem som synar och vem som höjer och samtidigt studera strukturen på de gemensamma korten kan ge ledtrådar om vilka kort dessa spelare sitter på, det är viktigt att studera spelarbeteende ifall de kan ge ledtrådar om deras handstyrka. För att få all denna information från pokerklienten och för att kommunicera tillbaka till klienten finns det en del möjliga metoder. Det är just dessa metoder som kommer att undersökas närmare i kommande kapitel. Vinstpotentialen för en pokerbot finns på grund av att en dator kan räkna exakta odds baserat på kort och annan information och göra matematiskt korrekta val. En vanlig mänsklig spelare kan eller hinner inte räkna ut samma information. Även om vinstmarginalerna kan vara små för en bot så blir den aldrig trött eller uttråkad och kan spela i all evighet. 8

11 3. Struktur och funktionalitet för pokerboten Körningen av en pokerbot kan beskrivas med tre faser: 1. Inläsning 2. Beräkning 3. Utförande Figur 3 visar ett tänkbart flödesschema för dessa tre faser i pokerboten. Figur 3 Pokerbotens tre faser 9

12 Inläsningsfasen består av att samla in all information som behövs för att boten skall kunna räkna ut korrekta odds. Ju mer information som kan samlas från pokerspelet desto bättre beslut kan räknas ut. Det finns en mängd olika metoder för att samla denna data och några av dessa kommer att undersökas närmare. Beräkningsfasen handlar om att räkna ut odds och därmed rätt beslut i pokerspelet. Utförandefasen handlar om att utföra beslutet i pokerklienten. Detta består av att göra drag i själva spelet men en helautonom bot måste också klara av att stänga och öppna nya bord. Eftersom en stor del av arbetet bygger på att prova olika metoder behövs ett modulärt angreppssätt. Målet är att lätt kunna byta ut en metod mot en annan utan att behöva koda om stora delar av programmet. Klassdiagrammet i figur 4 visar ett förslag på hur en pokerbot kunde byggas för att tillfredställa dessa krav. Det hela fungerar genom att skapa ett objekt av typen bot. Bot objektet använder sig av gränssnitten Gatherer och OutputHandler för att agera med pokerklienten. Vad t.ex. Gathererobjektet är av för typ spelar ingen roll, meningen är att den kan bytas ut mot valfri metod förutsatt att den implementerar gränssnittet. På så sätt kan man växla mellan t.ex. minnesläsning eller skärmskrapning. För mer information om objekt och gränssnitt i Java se (Niemeyer & Knudsen, 2005). Pokerklienter tillåter ofta att flera bord öppnas och spelas på samtidigt. För att maximera vinsten borde då också boten klara av flera bord på samma gång. För att göra detta skapas flera botobjekt, varje bot kör sin egen tråd och sköter sitt eget bord. En viss kommunikation krävs mellan botobjekten så de inte försöker göra drag i pokerklienten för snabbt eller samtidigt. Detta kan lösas genom att varje bot kollar med ett gemensamt tidsobjekt och ser till att tillräckligt lång tid har passerat från föregående drag. 10

13 Figur 4 Klassdiagram för pokerboten 11

14 4. Åtkomst av data 4.1. Skärmskrapning En vanlig metod för botar att samla information är skärmskrapning (eng. screen scraping) (Data Scraping, Wikipedia, 2013b). Detta innefattar att tolka det grafiska gränssnittet som presenteras av applikationen. Skärmskrapning består av två steg: 1) Hitta delarna av gränssnittet som är intressanta 2) Tolka det grafiska gränssnittet till data som boten kan hantera Det första steget är relativt enkelt i ett pokerspel eftersom elementen i spelet är helt statiska och inte byter position. Koordinater för viktiga positioner kan skrivas i t.ex. en XML-fil för att separera statiska variabler från programlogik. Om pokerboten spelar på fler bord samtidigt blir det dock väldigt många koordinater att hålla reda på, om det finns tio koordinater av intresse på ett bord och pokerboten spelar på nio bord samtidigt blir det 90 olika koordinater. För att lösa detta kan ett system av referenspunkter användas. Koordinaterna av intresse sparas utifrån en punkt på spelbordet, t.ex. övre hörnet till vänster, på så sätt behövs bara en koordinat för detta hörn på varje spelbord för att räkna ut resten av koordinaterna. Det andra steget innebär att tolka gränssnittet till rätt information. Detta består av att läsa enstaka pixlar men siffror och bokstäver måste också tolkas ur gränssnittet. Bildanalys av text kallas OCR (Optical Character Recognition) (Nimcomsoft). En bra implementerad optisk teckenläsare klarar av olika typer fonter och storlek på texten. Eftersom en kortlek endast består av siffrorna 2-10 och bokstäverna J,Q,K,A kanske det inte är nödvändigt att implementera en fullständig textigenkänningsalgoritm vid utveckling av en pokerbot. En naivare textläsare som bara klarar av en exakt teckenstorlek, ett teckensnitt och några få tecken skulle spara en hel del arbete om man inte planerar att använda pokerboten på många olika pokersidor. En primitiv optisk teckenläsare kunde implementeras på följande sätt: 12

15 Naiv metod 1) Räkna antalet pixlar varje tecken består av, spara värdena i en tabell för senare jämförelse. Naiv metod 2) Spara en bild på varje tecken som finns för att sedan jämföra med exakt bildmatchning. Dessa metoder fungerar naturligtvis bara under rätt omständigheter men de är enklare att implementera än en mer avancerad textläsningsalgoritm. Oavsett vilken metod som används så måste pixlar läsas från skärmen vilket är enkelt i Java med det inbyggda biblioteket jawa.awt.robot (Oracle, 2010). Kodexemplet nedan visar hur färgen på en bestämd pixel kan fås. Koordinaterna (x, y) anger vilken pixel som skall läsas. Ur Color-objektet kan RBG-värden (mängden rött, blått och grönt) hämtas för att kolla vilken färg pixeln är. import java.awt.robot; Robot robot = new Robot(); Color c = robot.getpixelcolor(x, y); Färgerna anges som vanligt med mängden rött, blått och grönt på en skala från En av de största fördelarna med läsning av pixlar är att det inte finns någon direkt kommunikation till pokerklienten. Pokerboten är bara ett program som läser vad som råkar finns på skärmen och för ingen direkt kommunikation med pokerklienten. 13

16 Exempel på skärmskrapning i Texas hold'em Dealerknappen kan endast finnas på tio olika positioner, dessa tio positioner är alltid samma och det är då enkelt att kolla om pixeln på knappositionen består av bakgrundsfärgen på bordet eller om den har en annan färg, vilket då tolkas som att knappen just då ligger där. Motståndarantal läses på liknande sätt. Om en motståndare är med eller inte representeras av två kort i spelet bredvid spelarens ikon. Om kortets färger inte kan hittas bredvid spelarens ikon, är han inte med i omgången. Spelkort kräver att två delar tolkas, valören och färgen på kortet. Färgen kan avgöras genom att kolla symbolen på kortet. Till skillnad från traditionella kortlekar har pokerklienter ofta valet att representera de fyra olika färgerna hjärter, klöver, spader och ruter med fyra olika färger istället för endast rött och svart. För att avgöra kortets färg kan RGB-värdena studeras: Hjärter (rött): Högt värde på rött, lågt på blått och grönt Ruter (blått): Högt värde på blått, lågt på rött och grönt Spader (svart): Lågt värde på samtliga färger Klöver (grönt): Högt värde på blått och grönt, lågt på rött Spelkortets valör eller rank skrivs med siffrorna 2 till 10 och J, Q, K, A och dessa måste urskiljas ifrån varandra med hjälp av optiskt teckenläsning. Potten representeras av ett par siffror och dessa måste också läses med optiskt teckenläsning. 14

17 4.2. Minnesläsning En alternativ metod till skärmskrapning är minnesläsning. Arbetsminnet eller RAMminnet är en viktig komponent i en dator, alla program som körs på en dator har ett allokerat minnesområde i RAM-minnet (Wikipedia, 2013d). I detta minnesområde lagras temporära datavariabler som används av program när de körs på datorn. Dessa variabler kan läsas och användas av en bot. Det finns en del utmaningar med minnesläsning: - Hur representeras data i minnet? - Var i minnet finns datan? Data kan lagras på många olika sätt och i olika variabeltyper och utan kunskap om programmets inre struktur kan det vara svårt att veta exakt hur data lagras. Om t.ex. ett datum eftersöks i minnet, lagras då datumet som en sträng, ett par heltal eller någonting helt annat? Detta beror helt på hur programmeraren har valt att göra programmet och ibland kan det vara svårt att veta hur specifik funktionalitet representeras i minnet. Eftersom man alltid inte vet exakt vad man letar efter är det också svårt att hitta det. Att manuellt söka genom minnet är inte heller praktiskt då tusentals rader av binär data inte är det lättaste att försöka förstå. För att få ett begrepp om hur minnet ser ut kan olika minnesläsningsprogram användas. Cheat Engine är ett sådant program (Cheat Engine). Med Cheat Engine kan minnesområdet för ett visst program öppnas, läsas och sökas igenom. Öppnas ordbehandlingsprogrammet jag använder i Cheat Engine kan vi hitta texten jag just nu sitter och skriver (se figur 4). Figur 5 En bit av minnet som används av ett ordbehandlingsprogram. 15

18 Minnesläsning i Java Minnesläsning är något som inte finns inbyggt i Java. För att använda Windows specifika funktioner såsom minnesläsning måste externa bibliotek användas. Med biblioteket JNA, Java Native Access, kan funktioner anropas som inte annars finns tillgängliga i Java (Wikipedia, 2013c). För att läsa minnet för ett program måste dess minnesområde först öppnas för att sedan läsas, detta görs med två funktioner, OpenProcess (Microsoft, 2012a) och ReadProcessMemory (Microsoft, 2012b). HANDLE WINAPI OpenProcess( _In_ DWORD dwdesiredaccess, _In_ BOOL binherithandle, _In_ DWORD dwprocessid ); BOOL WINAPI ReadProcessMemory( _In_ HANDLE hprocess, _In_ LPCVOID lpbaseaddress, _Out_ LPVOID lpbuffer, _In_ SIZE_T nsize, _Out_ SIZE_T *lpnumberofbytesread ); parameterförklaring: dwdesiredaccess binherithandle dwprocessid hprocess lpbaseaddress lpbuffer nsize lpnumberofbytesread Behörighetsnivå, t.ex. läsa eller skriva Om värdet är sant ärvs processens handtag Alla processer identifieras av ett ID Pekare till processen som öppnats Adressen som skall läsas ifrån I buffern sparas data som läses Storlek på buffer Pekare till antalet bytes som läses 16

19 Exempel: läsning av de gemensamma korten i pokerspelet För att koda ett användbart minnesläsningsprogram måste vi först bekanta oss med pokerklienten med hjälp av Cheat Engine. Precis som vilket datorprogram som helst lagras data i variabler i pokerklienten. Det första steget är att ta reda på exakt vilka minnesadresser innehåller informationen som eftersöks. För att hitta det vi söker efter i pokerklienten måste vi förstå var och hur detta lagras i minnet. Att manuellt leta igenom minnet efter t.ex. ett kort i spelet skulle inte vara möjligt, det finns miljontals bytes och det skulle ta alltför lång tid. Det fina med Cheat Engine är att vi kan söka genom hela minnet efter ett visst värde. Om vi t.ex. vill hitta minnesadressen för det första gemensamma kortet på bordet kan vi med en specifik sökteknik hitta minnesadressen för kortet. Detta kort lagras högst antagligen någonstans i minnet och även om värdet på detta kort förändras förblir platsen densamma. Med lite tur lagras kortets valör direkt med motsvarande siffra i minnet, med andra ord, valören för klöver två lagras som en tvåa, ruter sju lagras med en sjua, etc. Knepet vi nu måste använda är att söka i föregående sökresultat: Om vi ser i pokerklienten att kortet vi letar efter just nu är ett kort med valören 7 kan vi söka igenom hela minnet för pokerklienten efter siffran 7. Högst antagligen kommer vi få tusentals med träffar, men det är okej eftersom vi sparar alla adresser som hade värdet 7 till nästa sökning. När kortet i spelet sedan ändras, säg till ett kort med valören 4, kan vi nu söka efter värdet 4. När vi nu söker bland föregående resultat har kanske 500 av dessa råkat få värdet 4. Nästa gång kortet ändras kanske vi får 100 resultat. Fortsätter vi så här och om allt går rätt finns det bara en adress kvar i slutet. När man bekräftat att värdet för denna minnesadress ändras samtidigt och till rätt värde som det ändras i pokerspelet kan man anta att detta är just den adressen som innehåller vad man letar efter. När vi nu hittat adressen kan vi med hjälp av Cheat Engine studera närliggande minnesområde (figur 6) för att se om vi kan hitta någonting annat. Figur 6 Community kortens valörer markerade med blått. 17

20 Det första kortet har adressen , kortet representeras av talen 4 och 64. Kortets valör visas med en 4:a och färgen med 64 (64 kan översättas till 'd' med en ASCIItabell, 'd' är kort för diamonds, ruter på engelska). Med andra ord första kortet är en fyra med färgen ruter. Även fast vi endast sökte efter det första kortet kan vi se att vi också har hittat de fyra andra korten. Det andra kortet representeras av C och 73, tredje av 3 och 63 o.s.v. Vi kan också se att korten ligger med jämna mellanrum ifrån varandra, vilket betyder om vi hittar det första kortet, kan vi hitta de andra. Vi har nu hittat fem adresser för de fem korten som ligger på bordet i spelet. Tyvärr kan inte dessa adresser användas rakt av. När pokerklienten startas om finns det ingen garanti att samma minnesområde används, det är med högsta sannolikhet helt nya adresser. Vi kan inte heller konstruera vår bot att använda ovanstående sökmetod, boten vet ju inte vilka kort den skall söka efter. Utmaningen med minnesläsning är att pokerboten själv ska dynamiskt hitta de minnesadresser den behöver, utan att användaren av boten behöver säga åt den var den skall leta. Det hela handlar om att hitta något som identifierar vilka minnesadresser som skall läsas. Detta kan vara ett mönster, på sättet informationen är lagrad eller något som unikt som identifierar rätt minnesområde. I det här fallet så kommer det alltid samma unika sekvens med bytes före själva korten. Vad denna sekvens av bytes är, eller varför den finns där är inte så viktigt, det viktiga är att den alltid förekommer på endast ett ställe, med ett precis antal bytes före platsen med korten. Så för att dynamiskt hitta korten behöver vi bara hitta sekvensen av bytes som har markerats i figur 7. Figur 7 Unik sekvens av bytes markerat i orange, efter denna sekvens kommer de fem sökta korten. 18

21 Öppnas fler pokerbord i pokerklienten skapas också denna sekvens av bytes på lika många ställen. För att pokerboten skall klara av att spela på fler bord samtidigt måste rätt kort kopplas till rätt bord. Detta kan lösas genom att öppna ett bord i taget. Efter att det första bordet har öppnats, leta fram adressen för det första bordet. Vartefter nya bord öppnas, hoppa över tidigare bords adresser så dessa inte beaktas i nya sökningar. På så sätt kan rätt minnesadress kopplas till rätt pokerbord. Förstås, vissa delar av pokerklienten kan vara svåra att hitta i minnet om man inte känner till dess inre struktur. Det kan vara svårt att veta vad man ska leta efter, veta hur allting representeras i minnet eftersom en viss funktionalitet kan programmeras på så många olika sätt. 19

22 4.3. Val av dataåtkomstmetod Skärmskrapning och minnesläsning har båda för- och nackdelar, vilken metod som borde användas beror på pokerklienten man har valt. Skärmskrapning fungerar väldigt bra för enklare läsning såsom position eller antal motståndare i pokerspelet, medans läsning av siffror och bokstäver kräver mer arbete, speciellt om pokerklientens grafiska gränssnitt ofta förändras i programuppdateringar. T.ex. om koordinater för relevant data måste uppdateras eller om teckenstorlek eller teckensnitt ändras kanske hela textigenkänningsalgoritmen måste programmeras om. Om så är fallet fungerar minnesläsning kanske bättre då det är mindre sannolik att inre programförändringar sker. Med andra ord, skärmskrapning fungerar bättre till enklare grejer som inte kräver mycket underhåll ifall gränssnittet skulle ändras och minnesläsning fungerar bättre för läsning av exakt data som siffror och bokstäver. Även fast det är fullt möjligt att exklusivt använda endast en metod kanske det är mindre arbete för en programmerare att använda en kombination av både minnesläsning och skärmskrapning. Förstås finns det även fler metoder än endast minnesläsning och skärmskrapning. Den enklaste formen skulle vara att läsa och tolka en logfil som pokerklienter oftast har. En logfil innehåller information om kort och andra händelser i pokerklienten. Logfilerna är dock ofta inte tillräckligt bra för att räcka för en mer komplicerad bot. De innehåller inte alltid all information som behövs eller så uppdateras de inte i real tid. En orsak till detta är antagligen för att just stoppa botar från att enkelt kunna läsa all information som behövs. Eftersom spelet körs online och mot en server måste information om kort, pott etc. komma utifrån via nätet. Denna nätverkstrafik kan i teorin avlyssnas när den kommer in till pokerklienten. Denna nätverkstrafik kan dock vara krypterad men pokerklienter vars kommunikation inte är kunde detta vara en möjlig metod. I slutändan beror valet av metod på pokerklienten, den metod som fungerar bäst eller som är enklast att implementera på just den pokerklienten. 20

23 5. Kommunikation mot pokerklient När pokerboten väl samlat in all nödvändig information, bearbetat och gjort ett val måste valet också ageras. Boten behöver precis som en människa trycka på rätt knappar i pokerklienten. Det kanske enklaste sättet är att simulera rörelser och tryck med musen. Att styra musen är bekvämt i Java med hjälp av det inbyggda bibliotek, java.awt.robot. För att flytta på muspekaren krävs ett objekt av typen Robot och ett funktionsanrop. import java.awt.robot; import java.awt.event.inputevent; Robot robot = new Robot(); robot.mousemove(150, 200); Denna kod är allt som behövs i Java för att flytta musen till t.ex. pixel positionen (150, 200). För att sedan trycka ned och släppa musknappen för att simulera ett klick behövs följande kod: robot.mousepress(inputevent.button1_mask); robot.mouserelease(inputevent.button1_mask); Eftersom knapparna alltid ligger på samma ställe är det relativt enkelt att skriva ett par funktioner för att lägga sig, syna eller höja. Det går också att läsa var musen befinner sig, var den gör klick. Det är då inte heller helt orimligt att också pokerklienter läser musdata för att leta efter omänskligt beteende, för att stoppa botar. Det vore väldigt omänskligt att alltid trycka på exakt samma pixel varje gång så därför behövs ett mer slumpmässigt beteende. Eftersom knapparna har en viss storlek kan en koordinat slumpas fram som ligger nånstans inom knappens omkrets. Det är svårt att veta exakt hur olika pokerklienter analyserar musbeteende. För att vara på den säkra sidan borde också muskoordinater mellan knapparna simuleras istället för att musen konstant skulle hoppa från knapp till knapp. Att gå från punkt A till B i ett rakt sträck räcker knappast då en människa ofta flyttar musen i någon slags bågformad rörelse. 21

24 En metod att få en kurva mellan två punkter är att använda Bézierkurvan (Bézier curve, Wikipedia, 2013a). Formeln nedan är en kubisk Béizer. [x,y]=(1 t)3p0+3(1 t)2tp1+3(1 t)t2p2+t3p3 P0 och P3 är start och slutpunkten på kurvan. P1 och P2 bestämmer hur kurvan kommer att se ut beroende på hur de ligger i förhållande till P0 och P3. Figur 3 visar hur en kubisk Bézier fungerar. Genom att slumpa fram koordinaterna P1 och P2 (de gula punkterna i figur 3) kan vi få hyfsat realistiska och slumpmässiga kurvor för musen att följa. Figur 8 Kubisk Bézier (Tulleken, 2011) Människor klarar av korta avstånd utan större felmarginal men vid längre avstånd så missar vi mera när vi går från en punkt till en annan med musen. Detta är enkelt att 22

25 efterlikna om de slumpmässiga punkterna placeras baserat på hur lång sträcka musen måste flyttas. Ju längre bort de gula punkterna är från de orangea, ju större kurva kommer vi att få. Resultatet blir en mer mänsklig rörelse (figur 10) istället för att flytta musen i raka sträck. I figuren ser vi att båda metoderna träffar slumpmässigt inom knappen men med Bézier fås en mer mänsklig för själva rörelsen mellan knapp till knapp. Figur 9 Jämförelse av Bézier (övre delen av figuren) och att gå raka sträck mellan knappar 23

26 6. Undvika upptäckt 6.1. Metoder för att avslöja pokerbotar Det finns olika metoder för att avslöja pokerbotar men det är svårt att säga exakt vad som används av pokersidorna. En metod är bara effektiv så länge den hålls hemlig eftersom annars skulle ju botutvecklare göra allt för att kringgå metoderna. Nedan följer tänkbara metoder och hur dessa kan undvikas Speltid En av de kanske mest uppenbara metoderna är att titta på speltid för en spelare. Om en spelare sitter och spelar hela tiden, dag ut, dag in, väcker det nog varningsflaggor i systemet, och denne spelare kan sedan granskas noggrannare för att avgöra om det är en bot som spelar. Det gäller då helt enkelt att begränsa spelandet till mänskliga mängder så att boten inte körs hela tiden. Boten borde också ta pauser, även om det är mycket möjligt att spela t.ex. 12 timmar per dag är det nog ytterst svårt att göra det utan pauser i spelandet. En lösning skulle kunna innefatta en schemaläggare som kör boten på slumpmässiga intervall Timings En bot får inte utföra beslut för snabbt för det är knappast troligt att en människa skulle utföra knapptryck på hundradelar och fortfarande spela med vinst. Även om en dator har snabb beräkningsförmåga måste boten vänta tillräckligt länge mellan varje kommando den skickar till pokerklienten. Den måste också vänta slumpmässig tid så väntetiden inte blir samma för varje drag boten gör. Väntetiden mellan varje drag borde resultera en minimum tid plus en slumpmässig del Spionprogram i pokerklienten Pokerklienter kan innehålla spionprogram som letar efter egenskaper för kända pokerbotar genom att granska processer som körs på användarens dator, t.ex. Pokerstars nämner detta i deras användaravtal (Pokerstars, 2013). Kända pokerbotar upptäcks genom att leta efter namn på processen eller söka efter processer med samma storlek som kända botar. Fördelen med att utveckla sin egen bot är att den är unik från andra pokerbotar och kan inte upptäckas rakt av så länge den inte öppet distribueras. 24

27 6.5. CAPTCHA Captcha (Completely Automated Public Turing test to tell Computers and Humans Apart) har länge använts för att stoppa botar på internet och det är logiskt att använda dessa för att bekämpa pokerbotar. Problemet med Captcha för en bot är att först upptäcka att en ruta med en förfrågan dykt upp och sedan att skriva in rätt kod. Även om Captcha har knäckts är det en ganska svår uppgift. Istället för att försöka knäcka Captcha kunde en skärmdump tas och skickas till användarens smarttelefon där denne kan fjärrstyra pokerprogrammet och fylla i åt boten. Figur 10 Captcha, en metod att stoppa botar 6.6. Spelmönster Om en spelare har blivit misstänkt för användningen av en pokerbot men direkta bevis inte är tillräckliga kan spelmönster studeras. En pokerbot programmeras ofta att klara av specifika situationer på ett specifikt sätt och spelmönster uppstår eftersom boten alltid spelar efter programmerade regler. Även vid väldigt regelbaserat spel från mänskliga spelare uppstår variationer på grund av t.ex. misstag eller magkänsla som får spelare att avvika från sin nitiska strategi. För att få in ett mer slumpmässigt spelmönster måste pokerboten programmeras med t.ex. slumpmässiga bluffar i spelet för att bryta eventuella mönster. 25

28 7. Slutord Att bygga en pokerbot visade sig vara ett gigantiskt projekt. Fördelarna med att utveckla en egen bot är stora men det kräver också mycket arbete. Genom att själv bygga en bot har jag också fått en förståelse hur botar kan stoppas, eller åtminstone försvåra arbetet för botutvecklare. Utvecklingen i Java tillsammans med NetBeans har fungerat utmärkt, trots att minnesläsningen krävde ett externt bibliotek. Andra programmeringsspråk kanske hade fungerat smidigare för just minnesläsningsdelen men att programmera en bot i Java är fullt möjligt. Genom att avgränsa mig till kommunikationen mellan pokerboten och pokerklienten har jag kunnat undersöka och även implementera mina valda metoder noggrant, detta hade inte varit möjligt om pokerintelligensen också hade behandlats, då det är ett helt ämne i sig. Pokerintelligensen som inte har behandlats i detta arbete skulle vara nästa steg i utvecklingen av pokerboten. Förhoppningsvis har denna uppsats gett en liten bild över vad som krävs för att utveckla en pokerbot men också hur tekniker som minnesläsning, skärmskrapning och styrning av mus kan användas för att automatisera andra program och spel. 26

29 8. Litteraturförteckning Bézier curve, Wikipedia. (den a). Hämtat från Wikipedia: Cheat Engine. (u.d.). Cheat Engine. Hämtat från About Cheat Engine: den Data Scraping, Wikipedia. (den b). Hämtat från Wikipedia: den Drm0hr. (7 2012). File:Texas Hold'em Poker Table with Blinds.svg. Hämtat från Wikipedia: s.svg den Glimne, D. (2005). Pokerhandboken. BW. Microsoft. (den a). OpenProcess function. Hämtat från Microsoft: den Microsoft. (den b). ReadProcessMemory function. Hämtat från Microsoft: den Niemeyer, P., & Knudsen, J. (2005). Learning Java. Nimcomsoft. (u.d.). Optical Character Recognition (OCR) How it works. Hämtat från Nicomsoft: den Oracle. (2010). Class Robot. Hämtat från oracle.com: den Pokerstars. (2013). Användarvillkor för PokerStars onlinepokerprogram. Hämtat från Pokerstars: den Tulleken, H. (den ). Bézier Curves for your Games: A Tutorial. Hämtat från devmag.org.za: den Wikipedia. (den c). Java Native Access. Hämtat från Wikipedia: den Wikipedia. (den d). Random-access memory. Hämtat från Wikipedia: den

PROJEKTRAPPORT EDA095 NÄTVERKSPROGRAMMERI

PROJEKTRAPPORT EDA095 NÄTVERKSPROGRAMMERI PROJEKTRAPPORT EDA095 NÄTVERKSPROGRAMMERI NG STRESS LUNDS TEKNISKA HÖGSKOLA - 2013-05-22 Projektmedlemmar: Emil Apelgren adi10eap@student.lu.se Fredrik Helander gda10fhe@student.lu.se Jonathan Klingberg

Läs mer

Fyra i rad Javaprojekt inom TDDC32

Fyra i rad Javaprojekt inom TDDC32 Fyra i rad Javaprojekt inom TDDC32 Analys och design-dokument Version 2.0 Datum 2008-05-19 Dokumentnummer 20080303 Sammanfattning Detta är analys och design-dokumentet för programmet Fyra i rad. Fyra i

Läs mer

FrontPage Express. Ämne: Datorkunskap (Internet) Handledare: Thomas Granhäll

FrontPage Express. Ämne: Datorkunskap (Internet) Handledare: Thomas Granhäll FrontPage Express I programpaketet Internet Explorer 4.0 och 5.0 ingår också FrontPage Express som installeras vid en fullständig installation. Det är ett program som man kan använda för att skapa egna

Läs mer

Kortspel. Ett spel - tusen upplevelser

Kortspel. Ett spel - tusen upplevelser Kortspel Ett spel - tusen upplevelser 1 Översikt över korten i kortleken 7 8 9 10 Knekt Överste Kung Ess 2 Prova olika spel Farmor / Mormor 3-5 7, 8, 9, 10, Knekt, Överste, Kung, Ess Reglerna för detta

Läs mer

getsmart Grå Regler för:

getsmart Grå Regler för: (x²) 1 2 Regler för: getsmart Grå Algebra 8 _ (x²) 1 2 Algebra 4 (2 2³) 1 4 _ xy (2 2³) 1 4 _ xy (x²) 1 2 _ (2 2³) 1 4 _ xy (x²) 1 2 _ (2 2³) 1 4 _ xy 4 Algebra Algebra _ 8 Det rekommenderas att man börjar

Läs mer

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 20

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 20 Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 20 Förra gången: GUI: Sammanfattning Fler exempel: KryssEnkat och FotoAlbum Fönster med variabelt antal objekt Idag: Ett stort exempel:

Läs mer

UPPGIFT 1 V75 FIGUR 1.

UPPGIFT 1 V75 FIGUR 1. UPPGIFT 1 V75 FIGUR 1. Varje lördag året om spelar tusentals svenskar på travspelet V75. Spelet går ut på att finna sju vinnande hästar i lika många lopp. Lopp 1: 5 7 Lopp 2: 1 3 5 7 8 11 Lopp 3: 2 9 Lopp

Läs mer

Allmänt om Pidro. Spelets uppbyggnad

Allmänt om Pidro. Spelets uppbyggnad Allmänt om Pidro Pidro är ett kortspel för fyra personer där ett par spelar mot ett annat par. Lagmedlemmarna sitter mittemot varandra. Pidro liknar t.ex. Bridge i det avseendet att spelet är uppdelat

Läs mer

getsmart Gul Regler för:

getsmart Gul Regler för: Regler för: getsmart Gul 6 Diagram 4 Brøk Diagram 6 Brøk 4 Det rekommenderas att man börjar med att se på powerpoint-reglerna när man ska lära sig olika spel med kortleken! Kolla in hemsidan för fler powerpoint

Läs mer

Handbok Officersskat. Martin Heni Eugene Trounev Granskare: Mike McBride Översättare: Stefan Asserhäll

Handbok Officersskat. Martin Heni Eugene Trounev Granskare: Mike McBride Översättare: Stefan Asserhäll Martin Heni Eugene Trounev Granskare: Mike McBride Översättare: Stefan Asserhäll 2 Innehåll 1 Inledning 5 2 Hur man spelar 6 3 Spelets regler, strategi och tips 7 3.1 Spelbordet..........................................

Läs mer

Programmering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08

Programmering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Programmering A C# VT 2010 Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Innehåll Hjälp och referenser... 3 Kap 1 Introduktion... 3 Steg för steg... 3 Kapitel 2 Variabler...

Läs mer

Objektorientering i liten skala

Objektorientering i liten skala Linköpings Universitet Institutionen för datavetenskap (IDA) UPP-gruppen 2012-10-24 Objektorientering i liten skala Mål I denna lab skall du skriva ett objektorienterat program. Programmet skall delas

Läs mer

Från Smart TV till Smartare upplevelse Av: Kim Huber och Connie Huanca

Från Smart TV till Smartare upplevelse Av: Kim Huber och Connie Huanca Från Smart TV till Smartare upplevelse Av: Kim Huber och Connie Huanca System vi undersökte Den system vi valde att undersöka var en av de senaste smart tv som finns i markanden och var nämnd till bästa

Läs mer

Digitalt lärande och programmering i klassrummet

Digitalt lärande och programmering i klassrummet Stockholm 2018-02-14 14 februari 2018 Digitalt lärande och programmering i klassrummet Programmera i Python med micro:bit Introduktion I förra lektionen gick vi igenom grunderna i hur man programmerar

Läs mer

Ungefär lika stora tal

Ungefär lika stora tal Bilaga 2:1 Arbeta med jämförelser mellan tal Ungefär lika stora tal Jämför de tre talen här nedan: 234567 234566 234568 Alla siffrorna i talen är lika utom den sista, den högra, där siffrorna är 7,6 och

Läs mer

Programmering. Den första datorn hette ENIAC.

Programmering. Den första datorn hette ENIAC. Programmering Datorn är bara en burk. Den kan inget själv. Hur får man den att göra saker? Man programmerar den. Människor som funderar ut program som fungerar. Datorn förstår bara ettor och nollor och

Läs mer

Lathund till Publisher TEXT. Skriva text. Importera text. Infoga text. Dra och släpp

Lathund till Publisher TEXT. Skriva text. Importera text. Infoga text. Dra och släpp Lathund till Publisher TEXT Pekverktyget använder du när du ska markera en ram som du vill förändra på något sätt. Klicka på textverktyget. Placera muspekaren på den tomma dokumentytan, det spelar ingen

Läs mer

Appar vi arbetat med

Appar vi arbetat med Appar vi arbetat med Vårterminen 2013 Rönnbäcksskolan 5 juni 2013 ipad projekt Vt-2013 appar vi jobbat med, Sida 1 Choiceboard Creator Vi har använt denna app för att välja sång. Man kan ställa in så det

Läs mer

Sidpanelen och gadgetar De är nya. De är smarta. Lär dig hur du använder dem.

Sidpanelen och gadgetar De är nya. De är smarta. Lär dig hur du använder dem. Kap 03.indd 444 KAPITEL TRE Sidpanelen och gadgetar De är nya. De är smarta. Lär dig hur du använder dem. Gadgetar och den nya Sidpanelen är nog mina favoriter bland de nya funktionerna i Windows Vista.

Läs mer

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift ) Uppgift 1 ( Betyg 3 uppgift ) Skriv ett program, Draw_Hexagones, som ritar ut en bikupa enligt körexemplen nedan. Exempel 1: Mata in storlek på bikupan: 1 Exempel 3: Mata in storlek på bikupan: 3 \ / \

Läs mer

Att skriva på datorn

Att skriva på datorn Att skriva på datorn Innehåll: Inledning 1 Tangentbordet 2 Att skriva i Word 4 Att skriva på Internet 7 Övningar 8 2 Inledning Välkommen till steg 2 av Internetkursen för nybörjare! Vid detta kurstillfälle

Läs mer

Grunder. Grafiktyper. Vektorgrafik

Grunder. Grafiktyper. Vektorgrafik 2 Grunder All vår början bliver svår eller hur det nu brukar heta, och detta är något som gäller även Flash. För den som är ovan vid Flash gäller det säkert extra mycket, då det kan vara knepigt att förstå

Läs mer

3. Välj den sprajt (bild) ni vill ha som fallande objekt, t ex en tårta, Cake. Klicka därefter på OK.

3. Välj den sprajt (bild) ni vill ha som fallande objekt, t ex en tårta, Cake. Klicka därefter på OK. Moment 2: Klonspel Instruktioner för deltagare Idag ska du få lära dig om: Kloner - kopior av samma figur (sprajt) Variabler - ett värde, exempelvis antal poäng Slumptal - slå en tärning för att välja

Läs mer

SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS

SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS SLUTRAPPORT: TEXAS HOLDEM 4 FRIENDS Individuellt Mjukvaruutvecklingsprojekt (Utvecklare av digitala tjänster) Den 1 juni 2011 ABSTRAKT Rapporten tar upp positiva och negativa erfarenheter som jag erhållit

Läs mer

KURSMÅL WINDOWS STARTA KURSEN

KURSMÅL WINDOWS STARTA KURSEN KURSMÅL WINDOWS Detta är en introduktionskurs för dig som är nybörjare. Du kommer att få bekanta dig med datorns viktigaste delar och lära dig grunderna i operativsystemet Windows, vilket är en förutsättning

Läs mer

Föreläsning 2. Operativsystem och programmering

Föreläsning 2. Operativsystem och programmering Föreläsning 2 Operativsystem och programmering Behov av operativsystem En dator så som beskriven i förra föreläsningen är nästan oanvändbar. Processorn kan bara ges enkla instruktioner såsom hämta data

Läs mer

Roboten. Sida 1 av 11

Roboten. Sida 1 av 11 EV3 ipad Roboten Fyra output portar A,B,C och D(motorer) Fyra input portar 1,2,3 och 4 (sensorer) USB, Bluetooth, eller Wi-Fi koppling 16 MB flash minne 64 MB RAM SD Card Port: 32 GB Flera inbyggda verktyg

Läs mer

Gran Canaria - Arbetsbeskrivning knapplänkar (Mediator 8)

Gran Canaria - Arbetsbeskrivning knapplänkar (Mediator 8) Gran Canaria - Arbetsbeskrivning knapplänkar (Mediator 8) I detta exempel kommer du att lära dig Att skapa en ny presentation från början Att skapa en enkel knapp Att använda händelseinställningar, events

Läs mer

IT-körkort för språklärare. Modul 9: Rätta skrivuppgifter

IT-körkort för språklärare. Modul 9: Rätta skrivuppgifter IT-körkort för språklärare Modul 9: Rätta skrivuppgifter Innehåll I. Rätta uppgifter i Word... 3 Markera fel med färger snabbt och enkelt... 3 Använd Words rättningsverktyg skriv kommentarer... 4 Gör ändringar

Läs mer

Gränssnitt för FakeGranska. Lars Mattsson

Gränssnitt för FakeGranska. Lars Mattsson Gränssnitt för FakeGranska av Lars Mattsson (larsmatt@kth.se) Innehållsförteckning 1 Introduktion...3 2 Genomförande:...3 3 Användning...5 4 Kända buggar:...6 5 Källförteckning...6 2 1 Introduktion Taken

Läs mer

Ett enkelt OCR-system

Ett enkelt OCR-system P r o j e k t i B i l d a n a l y s Ett enkelt OCR-system av Anders Fredriksson F98 Fredrik Rosqvist F98 Handledare: Magnus Oskarsson Lunds Tekniska Högskola 2001-11-29 - Sida 1 - 1.Inledning Många människor

Läs mer

kl Tentaupplägg

kl Tentaupplägg Tentaupplägg TIPS 1: Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer

Läs mer

Kravspecifikation. Sammanfattning. Fyra i rad Javaprojekt inom TDDC32. Version 2.0. Datum Dokumentnummer

Kravspecifikation. Sammanfattning. Fyra i rad Javaprojekt inom TDDC32. Version 2.0. Datum Dokumentnummer Kravspecifikation Fyra i rad Javaprojekt inom TDDC32 Version 2.0 Datum 2008-05-19 Dokumentnummer 20080215 Sammanfattning Detta är en kravspecifikation över det klassiska spelet Fyra-i-rad programmerat

Läs mer

Projekt Rapport. RaidPlanner. Jeanette Karlsson UD10

Projekt Rapport. RaidPlanner. Jeanette Karlsson UD10 Projekt Rapport RaidPlanner Jeanette Karlsson UD10 Abstrakt: Denna rapport handlar om mitt projekt i kursen Individuellt Mjukvaruutvecklings projekt. Rapporten kommer att ta upp hur jag gått tillväga,

Läs mer

Internet. En enkel introduktion. Innehåll:

Internet. En enkel introduktion. Innehåll: Internet En enkel introduktion Innehåll: Datorns olika delar Starta datorn Så gör du om du kan webbadressen Så gör du om du inte kan webbadressen Kortfattad repetition Alingsås bibliotek, 2012 2 3 4 6

Läs mer

och Lär dig surfa på Internet Bilden nedan föreställer Södertälje kommuns hemsidans startsida Adressen till hemsidan

och Lär dig surfa på Internet Bilden nedan föreställer Södertälje kommuns hemsidans startsida Adressen till hemsidan Utgåva 1 och Lär dig surfa på Internet Sammanställd av: SeniorNet i Södertälje November 2008 Vi använder här Microsofts surfprogram: Windows Internet Explorer På skrivbordet högerklickar du på ikonen:

Läs mer

Implicita odds och omvända implicita odds

Implicita odds och omvända implicita odds Kapitel sju Implicita odds och omvända implicita odds Under de tidiga satsningsrundorna och satsningsrundorna i mitten sänks vanligtvis pottoddset avsevärt om du behöver syna framtida satsningar, och du

Läs mer

Objektorientering: Lagring och livstid

Objektorientering: Lagring och livstid TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Objektorientering: Lagring och livstid Tre sorters variabler Tre sorters variabel (1): Lokal 2 Lokal variabel Deklareras inuti en metod Vid varje anrop

Läs mer

Föreläsning 3.1: Datastrukturer, en översikt

Föreläsning 3.1: Datastrukturer, en översikt Föreläsning.: Datastrukturer, en översikt Hittills har vi i kursen lagt mycket fokus på algoritmiskt tänkande. Vi har inte egentligen ägna så mycket uppmärksamhet åt det andra som datorprogram också består,

Läs mer

Dollar Street Beta Version 1.0 Manual

Dollar Street Beta Version 1.0 Manual Dollar Street Beta Version 1.0 Manual Dollar Street på Internet: 1. Gapminder AB Dollar Street hittar du på www.gapminder.com som en Gapminder produkt. Alla Gapminder produkter handlar om internationella

Läs mer

[SLUTRAPPORT: DRAWPIXLZ (ANDROID-APP)] Slutrapport. Författare: Zlatko Ladan. Program: Utvecklare av Digitala Tjänster 180P

[SLUTRAPPORT: DRAWPIXLZ (ANDROID-APP)] Slutrapport. Författare: Zlatko Ladan. Program: Utvecklare av Digitala Tjänster 180P Slutrapport Författare: Zlatko Ladan Program: Utvecklare av Digitala Tjänster 180P Kurs: Individuellt Mjukvaruprojekt Z l a t k o L a d a n Sida 1 Abstrakt: Denna rapport handlar om mitt projekt som jag

Läs mer

Pottstorleksfilosofin ett exempel

Pottstorleksfilosofin ett exempel Kapitel fem Pottstorleksfilosofin ett exempel Säg att du spelar ett no limit-spel med mörkar på $2-$5 och $500 stora stackar. Du sitter i stora mörken med Någon inleder satsandet ur mittenposition med

Läs mer

Appar vi arbetat med. ipad projekt 2013 appar vi jobbat med. Nina Lundell Sida "1

Appar vi arbetat med. ipad projekt 2013 appar vi jobbat med. Nina Lundell Sida 1 Appar vi arbetat med ipad projekt 2013 appar vi jobbat med. Nina Lundell Sida "1 Vårterminen 2013 Rönnbäcksskolan 2013 ipad projekt 2013 appar vi jobbat med. Nina Lundell Sida "2 Choiceboard Creator Vi

Läs mer

Instruktioner. Innehåll: 1. Vad är Kimsoft Control (SIDA 2) 3. Hem (SIDA 2)

Instruktioner. Innehåll: 1. Vad är Kimsoft Control (SIDA 2) 3. Hem (SIDA 2) 1 Instruktioner Innehåll: 1. Vad är Kimsoft Control (SIDA 2) 2. Logga in (SIDA 2) 3. Hem (SIDA 2) 4. Skapa/redigera sidor (SIDA 3) 41. Lägg till ny sida (SIDA 3) 42. Avancerat (SIDA 4) 5. Texteditor (SIDA

Läs mer

Copema Supertoto, manual

Copema Supertoto, manual Copema Supertoto, manual Innehåll Sidan Bättre vinstchanser 2 Starta programmet 3 Create system, exempel 1 4 exempel 2 7 exempel 3 10 Ladda upp systemet 12 Rätta systemet 12 Odds 14 Print 15 Supertoto

Läs mer

Vanliga frågor för VoiceXpress

Vanliga frågor för VoiceXpress Vanliga frågor för VoiceXpress 1) Hur stort ordförråd (vokabulär) innehåller VoiceXpress? VoiceXpress innehåller ett mycket omfattande ordförråd, och svaret på frågan varierar en aning beroende på hur

Läs mer

Introduktion till programmering, hösten 2011

Introduktion till programmering, hösten 2011 Föreläsning 1 Programmering är ett hantverk. Det betyder att man inte kan läsa sig till den förmågan, man måste träna och man tränar genom att skriva mer och mer avancerade program. Programmering förutsätter

Läs mer

Lathund Claro Read Plus

Lathund Claro Read Plus Lathund Claro Read Plus Innehållsförteckning LathundWord Read Plus V 5...1 Innehållsförteckning...1 Starta... 2 Knappbeskrivning... 2 Börja läsa... 2 Börja skriva... 2 Knapp 8 Inställningar... 3 Knapp

Läs mer

Win95/98 Nätverks Kompendium. av DRIFTGRUPPEN

Win95/98 Nätverks Kompendium. av DRIFTGRUPPEN Win95/98 Nätverks Kompendium av DRIFTGRUPPEN Sammanfattning Vad håller jag i handen? Detta är en lättförståelig guide till hur man lägger in och ställer in nätverket i Windows 95 och 98 Efter 6 (sex) enkla

Läs mer

Datatal Flexi Presentity

Datatal Flexi Presentity Datatal Flexi Presentity En snabbguide för Presentity Innehållsförteckning 1. Login 2 2. Hänvisa 3 2.1 Att sätta hänvisningar 3 2.2 Snabbknappar 4 2.3 Windows gadget 4 3. Meddelande 5 4. Status 6 4.1 Exempel

Läs mer

Programmeringsuppgift Game of Life

Programmeringsuppgift Game of Life CTH/GU STUDIO TMV06a - 0/0 Matematiska vetenskaper Programmeringsuppgift Game of Life Analys och Linär Algebra, del A, K/Kf/Bt Inledning En cellulär automat är en dynamisk metod som beskriver hur komplicerade

Läs mer

TDIU Regler

TDIU Regler Regler Student får lämna salen tidigast en timme efter tentans start. Vid toalettbesök eller rökpaus ska pauslista utanför salen fyllas i. All form av kontakt mellan studenter under tentans gång är strängt

Läs mer

Regler för: - Räkna med sedlar og mynt!

Regler för: - Räkna med sedlar og mynt! Regler för: getsmart Kids - Räkna med sedlar og mynt! Det rekommenderas att man börjar med att se på powerpoint-reglerna när man ska lära sig olika spel med kortleken! Kolla in hemsidan för fler powerpoint

Läs mer

Orienteringsövningar. Oskar Andrén Värmlands Orienteringsförbund

Orienteringsövningar. Oskar Andrén Värmlands Orienteringsförbund Orienteringsövningar Oskar Andrén Värmlands Orienteringsförbund Orienteringsövningar Teoriövningar Ormen långe En kortlek med kartteckenstafett med 20 olika kort med karttecken. En fördel om man är ungefär

Läs mer

Programmering B med Visual C++ 2008

Programmering B med Visual C++ 2008 Programmering B med Visual C++ 2008 Innehållsförteckning 1 Repetition och lite nytt...5 I detta kapitel... 5 Programexekvering... 5 Loop... 5 Källkod... 6 Verktyg... 6 Säkerhetskopiera... 6 Öppna, kompilera,

Läs mer

Välkommen till Ipad för nybörjare

Välkommen till Ipad för nybörjare Välkommen till Ipad för nybörjare Detta häfte kommer innehålla Alla knappars funktioner Simplare och hjälpsamma sätt att kunna använda och ta sig runt i en Ipad Mindre genom gång av appar och dess betydelse

Läs mer

Agenda. Objektorienterad programmering Föreläsning 13

Agenda. Objektorienterad programmering Föreläsning 13 Objektorienterad programmering Föreläsning 13 Copyright Mahmud Al Hakim mahmud@dynamicos.se www.webacademy.se Agenda Ett objektorienterat exempel Repetition Mer om arv Abstrakta klasser Abstrakta metoder

Läs mer

6. Nu skall vi ställa in vad som skall hända när man klickar på knappen samt att markören skall ändra sig till en hand när markören är på knappen.

6. Nu skall vi ställa in vad som skall hända när man klickar på knappen samt att markören skall ändra sig till en hand när markören är på knappen. Fiskar Arbetsbeskrivning knappmeny (Mediator 8) I detta exempel kommer du att lära dig Att göra en mastersida med knappar Att använda en mastersida på andra sidor Att använd funktionen Alignment Arbetsgång

Läs mer

Komma igång med Qlikview

Komma igång med Qlikview Denna instruktion är till dig som är ny i Qlikview och snabbt vill komma igång med grundläggande funktioner. Innehåll 1 Introduktion... 2 1.1 Behörighet... 2 1.2 Webbläsare... 2 2 Installation av Qlikview

Läs mer

Programmering eller Datalogiskt tänkande

Programmering eller Datalogiskt tänkande Programmering eller Datalogiskt tänkande I förskolan handlar programmering om att få en begynnande förståelse vad det kan innebära. Barnen ges ett kreativt utrymme och har möjlighet att forma sin egen

Läs mer

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Att förstå variabler Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Vad är en variabel? En variabel är en plats att lagra information. Precis

Läs mer

Handbok Dela Skrivbord. Brad Hards Översättare: Stefan Asserhäll

Handbok Dela Skrivbord. Brad Hards Översättare: Stefan Asserhäll Brad Hards Översättare: Stefan Asserhäll 2 Innehåll 1 Inledning 5 2 Protokollet Remote Frame Buffer 6 3 Använda Dela Skrivbord 7 3.1 Dela Skrivbords huvudfönster............................... 7 3.1.1

Läs mer

getsmart Lila Regler för:

getsmart Lila Regler för: 3 2 Regler för: getsmart Lila 9 Graf y 4 7 3 2 2 3 Funksjon 1-4 4-3 -2-1 -1 1 2 3-2 x f(x)= f(x)= 3 2 2 3 3 2 2 3-3 -4 Graf 9 3 2 2 3 Funksjon 7 Det rekommenderas att man börjar med att se på powerpoint-reglerna

Läs mer

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014 Introduktion till Datalogi DD1339 Föreläsning 2 22 sept 2014 Namn Fält1 Fält2 Fält3 Metod1 Metod2 Metod3 Metod4 public class { public class { Åtkomst, public betyder fullt tillgänglig utifrån public

Läs mer

Nyheterna i Visma Tendsign 4.0

Nyheterna i Visma Tendsign 4.0 Användarmanual Nyheterna i Visma Tendsign 4.0 Uppdaterad 2014-05-21 VISMA COMMERCE AB +46 13 47 47 500 tendsignsupport@visma.com www.tendsign.com Innehållsförteckning 1. Visma TendSign 4.0... 2 2. Grafiskt

Läs mer

Laboration i datateknik

Laboration i datateknik KUNGLIGA TEKNISKA HÖGSKOLAN Laboration i datateknik Felsökning och programmering av LEGO NXT robot Daniel Willén 2012 09 06 dwill@kth.se Introduktionskurs i datateknik II1310 Sammanfattning Syftet med

Läs mer

ONEDRIVE ÖVERBLICK... 2. Vad är OneDrive?... 2 Molnet?... 2 Två typer av OneDrive... 2 Hitta sin OneDrive för företag... 3

ONEDRIVE ÖVERBLICK... 2. Vad är OneDrive?... 2 Molnet?... 2 Två typer av OneDrive... 2 Hitta sin OneDrive för företag... 3 OneDrive 1 Innehåll ONEDRIVE ÖVERBLICK... 2 Vad är OneDrive?... 2 Molnet?... 2 Två typer av OneDrive... 2 Hitta sin OneDrive för företag... 3 HANTERA DOKUMENT OCH FILER PÅ ONEDRIVE... 4 Skapa mapp... 4

Läs mer

Talsystem Teori. Vad är talsystem? Av Johan Johansson

Talsystem Teori. Vad är talsystem? Av Johan Johansson Talsystem Teori Av Johan Johansson Vad är talsystem? Talsystem är det sätt som vi använder oss av när vi läser, räknar och skriver ner tal. Exempelvis hade romarna ett talsystem som var baserat på de romerska

Läs mer

1(15) Bilaga 1. Av Projekt Neuronnätverk, ABB Industrigymnasium, Västerås Vt-05

1(15) Bilaga 1. Av Projekt Neuronnätverk, ABB Industrigymnasium, Västerås Vt-05 1(15) Bilaga 1 2(15) Neuronnätslaboration Räknare Denna laboration riktar sig till gymnasieelever som går en teknisk utbildning och som helst har läst digitalteknik samt någon form av styrteknik eller

Läs mer

Objektorientering: Lagring, räckvidd och livstid

Objektorientering: Lagring, räckvidd och livstid TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Objektorientering: Lagring, räckvidd och livstid Tre sorters variabler, två sorters metoder Räckvidd och livstid 2 Variabler (lokala och medlemsvariabler)

Läs mer

Instruktioner till övningen som börjar på nästa sida

Instruktioner till övningen som börjar på nästa sida Instruktioner till övningen som börjar på nästa sida Övningen innehåller det grundläggande som du måste kunna för att klara Word. Varje stycke ska vara formaterat så som det står i stycket. Under varje

Läs mer

Snabbstartguide för McAfee VirusScan Plus

Snabbstartguide för McAfee VirusScan Plus Nödvändigt datorskydd McAfee VirusScan innehåller anti-virus- och anti-spywareskydd för din dator. McAfee Total Protection innehåller även dator- och nätverksverktyg samt McAfee SiteAdvisor för säker surfning.

Läs mer

Programmeringsteknik med C och Matlab

Programmeringsteknik med C och Matlab Programmeringsteknik med C och Matlab Kapitel 6: Filhantering Henrik Björklund Umeå universitet 13 oktober 2009 Björklund (UmU) Programmeringsteknik 13 oktober 2009 1 / 22 Textfiler Filer är sekvenser

Läs mer

ANVÄNDARBESKRIVNING FÖR PERSONAL

ANVÄNDARBESKRIVNING FÖR PERSONAL ANVÄNDARBESKRIVNING FÖR PERSONAL 1 INLEDNING Programmet ipool är ett system för att på ett effektivt sätt sköta bemanning och personalinformation via ett webbaserat gränssnitt som är enkelt att använda

Läs mer

7-2 Sammansatta händelser.

7-2 Sammansatta händelser. Namn: 7-2 Sammansatta händelser. Inledning Du vet nu vad som menas med sannolikhet. Det lärde du dig i kapitlet om just sannolikhet. Nu skall du tränga lite djupare i sannolikhetens underbara värld och

Läs mer

«Sida 2 av 4 Till kursens framsida Sida 4 av 4»

«Sida 2 av 4 Till kursens framsida Sida 4 av 4» Sida 1 av 11 Lektion 1: sida 3 av 4 «Sida 2 av 4 Till kursens framsida Sida 4 av 4» 2. Formatera text Du kan ju redan skriva in text, men nu ska vi se hur man formaterar det man skrivit in -- alltså hur

Läs mer

Regler för: getsmart Grön

Regler för: getsmart Grön -6 Regler för: getsmart Grön 8 Hele tall 3 4 Hele tall -6-6 3-6 3 Hele tall 8 Hele tall 3 4 Det rekommenderas att man börjar med att se på powerpoint-reglerna när man ska lära sig olika spel med kortleken!

Läs mer

FIRSTCLASS. Innehåll:

FIRSTCLASS. Innehåll: FIRSTCLASS Innehåll: Hämta klient...2 Installera klient...2 Konfigurera klient...2 Koppla upp...3 Skrivbordet...3 Mailbox...3 Presentation...3 Skapa ett nytt meddelande...4 Söka mottagare för nytt meddelande...4

Läs mer

Kortdokumentation. Avancerade Wordfunktioner

Kortdokumentation. Avancerade Wordfunktioner Kortdokumentation Avancerade Wordfunktioner Olika typer av mallar När man arbetar med ett ordbehandlingsprogram finns det egentligen tre typer av mallar man kan använda för att automatisera sitt arbete;

Läs mer

Att skriva till och läsa från terminalfönstret

Att skriva till och läsa från terminalfönstret Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen

Läs mer

JavaScript del 5 Funktioner

JavaScript del 5 Funktioner JavaScript del 5 Funktioner När man skriver JavaScriptkod eller program i andra programmeringsspråk för den delen så kan det finnas anledningar till att man vill dela upp sitt stora program i flera mindre

Läs mer

Allta bilder du ritar med verktygen i verktygspanelen eller importerar är grafik.

Allta bilder du ritar med verktygen i verktygspanelen eller importerar är grafik. Lite teori bakom symboler och förekomster Centralt i Flash är begreppen grafik, symboler och förekomster. Allta bilder du ritar med verktygen i verktygspanelen eller importerar är grafik. Symboler kan

Läs mer

PROGRAMMERINGSTEKNIK TIN212

PROGRAMMERINGSTEKNIK TIN212 Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Robin Adams Göteborg 8 June 2018 PROGRAMMERINGSTEKNIK TIN212 Dag: Fredag Datum:

Läs mer

UB:s sö ktjä nst - Söka artiklar och annan litteratur

UB:s sö ktjä nst - Söka artiklar och annan litteratur 1 UB:s sö ktjä nst - Söka artiklar och annan litteratur Innehåll Börja här... 2 Logga in... 2 Mitt konto... 3 Adressändring... 3 Spara sökresultat... 4 Sökhistorik & litteraturbevakning... 5 Söka, välja,

Läs mer

Skärmtangentbordet som är enkelt att använda både med mus, touchskärmar och interaktiva whiteboards

Skärmtangentbordet som är enkelt att använda både med mus, touchskärmar och interaktiva whiteboards Skärmtangentbordet som är enkelt att använda både med mus, touchskärmar och interaktiva whiteboards Tel: 031-769 00 60 info@frolundadata.se www.frolundadata.se Introduktion WizKeys är flexibelt och kostnadseffektivt

Läs mer

Mitt hus och jag steg för steg instruktioner

Mitt hus och jag steg för steg instruktioner Mitt hus och jag steg för steg instruktioner Till den här uppgiften behöver du ett foto på dig själv, ditt hus, en karta och en huvudlös figur. Se till att alla bilder ligger på samma ställe på din dator

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Pekare och Listor Eric Elfving Institutionen för datavetenskap 31 oktober 2014 Översikt 2/41 Internminne Pekare Dynamiska datastrukturer (Enkellänkade) listor Arbeta

Läs mer

Handbok Othello. Clay Pradarits Utvecklare: Mario Weilguni Granskare: Lauri Watts Översättare: Stefan Asserhäll

Handbok Othello. Clay Pradarits Utvecklare: Mario Weilguni Granskare: Lauri Watts Översättare: Stefan Asserhäll Clay Pradarits Utvecklare: Mario Weilguni Granskare: Lauri Watts Översättare: Stefan Asserhäll 2 Innehåll 1 Inledning 5 2 Hur man spelar 6 3 Spelets regler, strategi och tips 7 3.1 Spelets grunder.......................................

Läs mer

Säkerhetsinställningar, websolen. Innehåll

Säkerhetsinställningar, websolen. Innehåll Innehåll 1 Säkerhetsinställningar i websolen... 2 1.1 Varför behövs detta?... 2 1.2 Instruktion, Internet Explorer 11... 2 1.2.1 Lägg till websolen som betrodd plats... 2 1.2.2 Både http och https... 4

Läs mer

Kapitel 1 Introduktion

Kapitel 1 Introduktion Kapitel 1 Introduktion ZoomText 9.1 är en kraftfull programlösning för synskadade. Innehåller två olika teknologier förstoring och skärmläsning ZoomText tillåter dig att se och höra allting som visas på

Läs mer

Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning

Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning Generell säkerhet Här finns det inga direkta rätt eller fel. Snarare saker man bör tänka på när man implementerar ett program. Kort sagt: Efter att du kommit på hur du tänkt göra, sov på saken och tänk

Läs mer

Ikonen för ett Microsoft Word-dokument.

Ikonen för ett Microsoft Word-dokument. 2 Dokument Du kan skapa både enkla och mer komplicerade dokument på din dator. Det beror på vilket datainnehåll du vill ha i ditt dokument. Datainnehållet kan vara till exempel text och grafiska objekt,

Läs mer

Att använda talsyntes i en lässituation.

Att använda talsyntes i en lässituation. Att använda talsyntes i en lässituation. Komma igång med ClaroRead Starta talsyntesprogrammet 1 Gå till Startmenyn Program Clarosoftware 2 Klicka på för att starta talsyntesen ClaroReads verktygsrad syns

Läs mer

Snabbguide till Cinahl

Snabbguide till Cinahl Christel Olsson, BLR 2008-09-26 Snabbguide till Cinahl Vad är Cinahl? Cinahl Cumulative Index to Nursing and Allied Health Literature är en databas som innehåller omvårdnad, biomedicin, alternativ medicin

Läs mer

Extramaterial till Matematik Y

Extramaterial till Matematik Y LIBER PROGRAMMERING OCH DIGITAL KOMPETENS Extramaterial till Matematik Y NIVÅ TRE Taluppfattning och tals användning ELEV Det finns många olika programmeringsspråk. I den här uppgiften ska du få bekanta

Läs mer

Programmering. Scratch - grundövningar

Programmering. Scratch - grundövningar Programmering Scratch - grundövningar Lär känna programmet: Menyer för att växla mellan att arbeta med script, utseende/bakgrund och ljud. Scenen där allting utspelar sig. Här klickar du på bakgrunden

Läs mer

BRIDGE MASTER 2000 SCANDINAVIA av Fred Gitelman

BRIDGE MASTER 2000 SCANDINAVIA av Fred Gitelman BRIDGE MASTER 2000 SCANDINAVIA av Fred Gitelman installeras från det fönster, som automatiskt kommer upp, när CD-skivan sätts i datorn: Klicka till höger om INSTALLATION på flaggan för den version, som

Läs mer

SkanRead hjälp. SkanRead 2.0. Elevdata AB

SkanRead hjälp. SkanRead 2.0. Elevdata AB SkanRead hjälp SkanRead 2.0 Elevdata AB SkanRead hjälp: SkanRead 2.0 Elevdata AB Copyright 2011 Elevdata AB Innehållsförteckning Inledning... v 1. Så här gör du!... 1 2. SkanRead i CD-ORD och programmenyn...

Läs mer

Miljön i Windows Vista

Miljön i Windows Vista 1 Miljön i Windows Vista Windows Aero Windows Aero (Aero Glass), som det nya utseendet eller gränssnittet heter i Vista, påminner mycket om glas och har en snygg genomskinlig design. Det är enklare att

Läs mer