BridgeView. Klasser i BridgeView. Klassen Grafiska Gränssnittet. Klassen TSPELET

Relevanta dokument
Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 3-4 Innehåll

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

TDDC77 Objektorienterad Programmering

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Objektorienterad programmering i Java I

Arrayer (fält)

Föreläsning 6: Introduktion av listor

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Imperativ programmering. Föreläsning 4

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Tentamen ID1004 Objektorienterad programmering May 29, 2012

#include <stdio.h> #include <string.h>

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Föreläsning REPETITION & EXTENTA

TUTORIAL: KLASSER & OBJEKT

Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets

Tentamen i Algoritmer & Datastrukturer i Java

Kopiering av objekt i Java

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

Repetition av OOP- och Javabegrepp

TDIU01 - Programmering i C++, grundkurs

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Repetition av OOP- och Javabegrepp

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Tentamen, EDAA20/EDA501 Programmering

Sammansatta datatyper Generics: Parametrisk polymorfism

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Abstrakta datatyper Laboration 2 GruDat, DD1344

1. Definiera klassvariabel. 2. Instansvariabel för klass. Selektera klass i Browsern och tryck på statics. Definiera protokollnamn, Protocol->Add...

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Tentamen i Introduktion till programmering

Objektinteraktion. Objektorienterad programmering Laboration 2. Syfte Att konstruera ett litet objektorienterat program med flera samverkande objekt.

Programmering för språkteknologer II, HT2014. Rum

DAT043 Objektorienterad Programmering

TDDD78, TDDE30, 729A Grafik: Att "rita" egna komponenter

Tentamen, EDAA10 Programmering i Java

KARLSTADS UNIVERSITET 12/8/09 informatik & datavetenskap Johan Öfverberg, Kerstin Andersson Laboration 4, ISG A04 och DVG A08 HT-09

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Rekursion. Koffman & Wolfgang kapitel 5

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Objektorienterad Programkonstruktion

Tentamen TEN1 HI

LABORATION 4 OBJEKTORIENTERAD PROGRAMMERING I C++ I

Typkonvertering. Java versus C

Länkade listor och automatisk testning

Tentamen TEN1 HI

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Objektorienterad programmering D2

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Objektorientering: Lagring, räckvidd och livstid

Skizz till en enkel databas

2D1310 Programmeringsteknik Tentamen (1p) lördag 29 april 2000 kl 14-17

Värmedistribution i plåt

Tentamen, Algoritmer och datastrukturer

Agenda. Objektorienterad programmering Föreläsning 13

Laboration 1 Introduktion till Visual Basic 6.0

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

Uppgift 1 ( Betyg 3 uppgift )

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

Tentamen TEN1 HI

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

OOP Objekt-orienterad programmering

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Den som bara har en hammare tror att alla problem är spikar

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

OOP Objekt-orienterad programmering

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsning 2. Länkad lista och iterator

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Tentamen, EDAA20/EDA501 Programmering

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Grafiska användargränssnitt i Java

Föreläsningsmaterial (Syntax och variabler)

Föreläsning 5 Innehåll

Transkript:

BridgeView Till denna andra prototyp av programmet har klasserna byggts ut och fått en struktur som klarar av det enda användarfall, som hittills tagits upp. Förhoppning finns att nya användarfall inte ska leda till för stora ändringar. Eventuellt kan nya klasser tillkomma. Klasser i BridgeView Klassen Grafiska Gränssnittet Den centrala, men samtidigt just nu minsta klassen. GUI-klassen, innehåller just nu fyra datamedlemmar, i form av knappar och fem metoder, de två obligatoriska FormCreate och FormPaint samt tre händelser knapptryckningar. Denna klass kommer att byggas ut ordentligt med bland annat meny, flikar och flera knappar. TFORM = class(tform) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure FormCreate(Sender: TObject); procedure FormPaint(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button4Click(Sender: TObject); Objektet från denna klass kommunicerar med objekt från klasserna TSPELET och TDATABASE. Objekt SPEL av klassen TSPEL och DATABAS från TDATABASE skapas härifrån, När namnet på indatafilen är bestämd meddelas DATABAS som efter sitt arbete returnerar en pekare till starten av den länkade listan av bridgebrickor. Både BUTTON1CLICK och BUTTON2CLICK anropar metoden STARTAGAIN hos objektet SPEL, som bygger upp en bridgebricka för visning. Metoden FormPaint lägger ut bilden BORDBILD, vars utseende skapats i SPEL. Metoden PLAYNEXTCARD i SPEL flyttar nästa kort från handen till mittet av bordet. Ingen av metoderna i denna klass har fler än tre kodrader. Klassen TSPELET Klassen TSPELET är för närvarande den största, med ett antal mer eller mindre intressanta datamedlemmar och metoder. De flesta datatyperna finns deklarerade i filen DEKLARATIONER. En del strukturer finns dock med i deklaration av klassen, men kommer senare att flyttas över för att få en mer logisk uppbyggnad. Klassen känner inte till vare sig TFORM1 eller TDATABASE och anropar inga metoder utanför sig själv. Däremot används, som sagt, ett antal element deklarerade i DEKLARATIONER. Håkan Strömberg 1 KTH Syd Haninge

TSpelet= Class(TObject) public giv:tgiv; bordbild:tbitmap; bordgrund:tbitmap; lek:array[spades..clubs,2..14] of TKort; filnamn:string; kb,kh:integer; Start,AktuellP:TPekare; Antal:integer; Aktuell:TBricka; ToBid:TPlayer; KortOrdning:array[1..52] of record Finns:boolean; Spelare:TPlayer; Farg:TFarg; Valor:integer; Hallare:array[1..4] of record Finns:boolean; Kort:TKort; x,y:integer; LaggOrdning:TOrdning; TabOrdning:TOrdning; AntalSpelade:integer; StickKlart:boolean; function NextPlayer(Next:TPlayer):TPlayer; function KortKonvertering(s:string;var f:tfarg;var v:integer):boolean; procedure SpelOrdning; procedure InitPlay(Won:TPlayer;var Ordning:TOrdning); procedure TomHallare; procedure Previous; procedure StartAgain; procedure PlayNextCard; procedure InitBid; procedure BidNextBid; procedure Mala; constructor create; destructor free; giv håller reda på aktuell giv. Varje spelare har en array med 52 element, som är TRUE eller FALSE beroende på om just det kortet finns på handen. bordbild På denna bitmap byggs skärmens utseende upp av metoden mala. Bilden hämtas sedan av GUI:ens paint och läggs ut på skärmen bordgrund På denna bitmap läggs alla fast element ut då objektet skapas. Bitmapen kopieras till bordbild inför varje ny skärmvisning. Håkan Strömberg 2 KTH Syd Haninge

lek Innehåller bilder på de 52 korten tillsammans med färg och valör. filnamn. Namnet på PBN-filen från vilken brickorna lästs in. Kommer troligtvis att flyttas kb,kh håller reda på kortets höjd och bredd. Start,AktuellP två pekare till element i listan av brickor. Start håller reda på listans första bricka och AktuellP på den som just nu visas på skärmen. Antal. Så många brickor finns det i listan Aktuell. Hit kopieras brickan från brickan i listan. Tanken är att man ska kunna editera den och spara den i i listan men också ändra sig och återgå till ursprunget. ToBid Den spelar som står i tur att bjuda. Denna rutin är ännu inte utvecklad. KortOrdning. Från play-matrisen i PBN-filen, byggs en max 52 element lång vektor upp i den ordning korten spelas. Denna datastruktur är en form av mellanlagring, som ska göra det snabbt (programmeringstekniskt) att spela upp korten och ta tillbaka. Varje element i vektor utgörs av en post som innehåller spelare samt kortets färg och valör. Hallare Håller reda på de kort som spelats ut till ett stick, var och i vilken ordning de ska presenteras någonstans mitt på skärmen. Strukturen töms då fyra kort, ett helt stick, har spelats. LaggOrdning En hjälpvariabel som underlättar för att bygga upp Kortordning TabOrdning En annan hjälpvariabel med samma uppgift som ovan. AntalSpelade Hur många kort som spelats hittills StickKlart Håller reda på om fyra kort spelats på och om sticket därmed är avslutat. function NextPlayer En hjälpmetod som kanske kommer att flyttas och buntas ihop med en del andra under DEKLARATIONER. Alltså utanför alla klasser. Något som inte är möjligt i till exempel JAVA. function KortKonvertering Tar emot en sträng med två tecken och packar upp den till färg och valör. Funktionen returnerar FALSE om uppackningen misslyckades. Egentligen ska alla tänkbara fel i PBN-filen upptäckas av DATABASE. procedure SpelOrdning Den mest komplicerade metoden så här långt, som bygger upp vektorn Kortordning från i stort sätt rådata i PBN-filen. Kanske ska även denna metod i framtiden finnas i DATBASE. procedure InitPlay. Initierar spelordningen iför varje stick. En typisk hjälpmetod. Utdata är en vektor med spelarna i den ordning de kommer att spela på under nästa stick. Det är den som vann senaste stick som avgör detta. procedure TomHallare Tömmer Hallare efter varje färdigspelat stick eller då man mitt i sticket går till nästa bricka. procedure StartAgain Kommer framöver att få namnet Next. Visar nästa bricka i listan. En huvudmetod som anropar många av de andra metoderna. procedure Previous Backar till föregående bricka procedure PlayNextCard Spelar nästa kort. Det är KortOrdning som levererar data. Metoden anropas av metod i GUI. procedure InitBid För att initiera budgivningsfasen. Ännu ej implmenterad. procedure BidNextBid Visar nästa bud. Ännu ej implementerad. Håkan Strömberg 3 KTH Syd Haninge

procedure Mala Metoden placerar ut korten på aktuella platser på bitmap bordbild. NärPaint i GUI exekveras kan den färdiga bilden hämtas ned. constructor create Metod som skapar ett objekt av denna klass, destructor free tar bort objektet och frigör minne. Den länkade listan berörs dock inte av detta och måste hanteras för sig (ännu ej implementerat). Klassen TDataBase Den här klassen känner inte till några andra klasser. Endast GUI känner till TDataBase och kommunicerar endast via en metod, Work. GUI skickar in ett filnamn och får tillbaka startpekaren till den lista som innehåller bridgebrickorna. Den länkade listan är uppbyggd av poster som deklarerats i DEKLARATIONER. Denna postdeklaration måste TSPELET känna till, men den ingår inte i klassen. Denna fil innehåller cirka 300 rader. Lite är planerat, men om den ska innehålla allt som visionen lovar kommer koden troligtvis inte att understiga 3000 rader. TDataBase=Class(TObject) public infil:textfile; filnamn:string; Start:TPekare; Antal:integer; function Work(fn:string;var S:TPekare):integer; procedure Open; procedure LasInAlla; constructor create; destructor free; infil En filvariabel behövs. filnamn Namnet på filen som ska öppnas. Finns alltså på två ställen. Det finns ingen anledning att ha den i TSPELET. Start. Pekare till listans början Antal. Antal brickor i listan function Work Metoden som delar ut arbetet till främst (fn:string;var S:TPekare):integer; procedure Open Enbart för att öppna filen procedure LasInAlla Det är denna metod som gör hela jobbet. Läser in rad för rad från filen, packar upp innehållet och placerar i listans poster. Just nu görs endast en rudimentär kontroll av indata. Om det finns logiska fel i PBN-filen, kommer detta knappast att upptäckas. Metoden är ändå på över 200 kodrader och bör kanske brytas ned i i mindre delar. constructor create Skapar ett objekt av denna klass. destructor free tar bort ett objekt av denna klass. Håkan Strömberg 4 KTH Syd Haninge

Deklarationer Här följer deklarationer av gemensamma datatyper, kortfärger, spelare, kort, händer. Dessutom Bricka, som utgör posten för för bridgebrickorna i den länkade listan. Allting där är inte helt logiskt genomfört. En del smärre förändringar av datatyper kommer att göras för att snygga upp. type TFarg=(SPADES,HEARTS,DIAMONDS,CLUBS,NOTRUMPH); TPlayer=(SOUTH,WEST,NORTH,EAST); TKort=record value:2..14; color:spades..clubs; bild:tbitmap; THand=array[SPADES..CLUBS,2..14] of boolean; TGiv=array[SOUTH..EAST] of THand; TPekare=^TBricka; TTabRad=array[1..4] of string[5]; TOrdning=array[1..4] of TPlayer; TBricka=record Event:string[255]; Site:string[255]; Date:string[255]; Board:integer; South:string[255]; West:string[255]; North:string[255]; East:string[255]; Dealer:TPlayer; Vulnerable:string[4]; Deal:array[SOUTH..EAST] of THand; Scoring:string[255]; Declarer:TPlayer; Contract:string[5]; Trumph:TFarg; AntalStick:integer; Result:integer; Auction:array[1..15] of TTabRad; Play:array[1..13] of TTabRad; Utspelare:TPlayer; Next:TPekare; Håkan Strömberg 5 KTH Syd Haninge