Page 1 of 7

Praktijk examen van vorige jaren.

Posted: Fri Dec 23, 2005 4:04 pm
by Shinta
Aangezien het wat een tijdsverspilling is om even alle examens van de vorige jaren opnieuw te maken zou ik willen voorstellen dat iedereen er eentje doet, hiervoor vraag ik (buite mezelf) vijf vrijwilligers, Nick is al met de laatste bezig, ik ga met de eerste beginnen.
De examenvragen zijn ongeveer allemaal in de zelfde trend dus dit is een goede voorbereiding voor het praktijk om eens te zien hoe alles in mekaar zit.

Posted: Fri Dec 23, 2005 4:28 pm
by Nickman
Ik wil me wel is wagen aan dat oxo spelletje eventueel ;).
Dirk is al goed opweg met die verkoopsdingen, alleen dan zonder OO...

Posted: Fri Dec 23, 2005 4:37 pm
by Gregg
http://rodendijk18.com/~beton/codes/oxo.txt

die kerel deed het eerste een paar jaar geleden en had 19/20 op praktijk programmere

Posted: Fri Dec 23, 2005 4:44 pm
by Shinta
Mooie werkwijze, spijtig daget bij mij ni werkt, misschien ontbreekt de testmodule of een freaking handleiding :wink: .
EDIT : Amai woef agij dees oefening krijgt dan zien we u is huile :lol: .

Posted: Fri Dec 23, 2005 5:37 pm
by EagleEye812
Ik heb die laatste oef Kleinhandel.Mod (zonder OO, maar dat staat ok nergens in de opdracht) gemaakt en gepost in die andere thread.
Ik zal een van de dagen wel nog een ander maken maar nu ben ik het eventjes beu :)

Posted: Fri Dec 23, 2005 10:40 pm
by Shinta
mijn werk is gedaan :wink:

Posted: Fri Dec 23, 2005 10:47 pm
by EagleEye812
Mooi gedaan! Works like a charm :)

ps: wat een dom spel :lol:

edit: gekunt ook dit doen

Code: Select all

current^.rij := beweging^.rij;
in plaats van

Code: Select all

FOR index := 0 TO 14 DO
     current^.rij[index] := beweging^.rij[index];
END;
ni :?:

Posted: Sat Dec 24, 2005 9:43 am
by Norfolk
ja volgens mij wel, gewoon de hele array toekennen...

Posted: Sat Dec 24, 2005 4:45 pm
by Shinta
kan wel ;) wedde dak u in da spel beat :P ik win altijd

EDIT: en de rest ?

Posted: Sat Dec 24, 2005 7:18 pm
by Nickman
Aanschouw, mijn OXO spelletje :D
Ik vind het een verbetering van dien anderen dude aangezien ge bij mij zelfs kunt saven en terug opnene ;).

Image

---------------
UPDATE
Geupdate naar versie 1.2, changelog in Tool file.
---------------
UPDATE
Geupdate naar versie 1.3
---------------
UPDATE
Geupdate naar versie 1.5 (grote verandering ;))
---------------
BUGFIX
Update naar 1.5.1 bug voor einde van het spel weggehaald :)

OXO.Mod

Code: Select all

(*
	Description: Een OXO spelletje
	Author: Nick De Frangh
	Date Created: 24/12/2005
	Versie : 1.5.1
*)

MODULE OXO;
	IMPORT
		OutExt, In, Input, Files;

	TYPE
		Speler =
			RECORD
				Naam : ARRAY 20 OF CHAR;
				Score : INTEGER;
				Kleur : INTEGER;
			END;
		SpelerPointer = POINTER TO SpelerArr;
		SpelerArr = ARRAY OF Speler;
		
		Celeig =
			RECORD
				character : CHAR;
				kleur : INTEGER;
			END; 
			
		BordPointer = POINTER TO BordArr;
		BordArr = ARRAY OF Celeig;		
				

	VAR
		breedte: INTEGER;
		lengte: INTEGER;
		speelbord : BordPointer;
		beurt : INTEGER;
		speler : SpelerPointer;
		aantal : INTEGER;
		totaal: INTEGER;
		zetten: INTEGER;
		winnaar: Speler; 	
	
	PROCEDURE StartNew*;
		VAR
			x, y, z: INTEGER;
	BEGIN
		In.Open();
		OutExt.Open();
		OutExt.Clear;
		
		In.Int(breedte);
		In.Int(lengte);
		
		In.Int(aantal);
		NEW(speler, aantal);
		DEC(aantal);
		
		NEW(speelbord, (breedte * lengte));
		
		FOR z := 0 TO aantal DO
			In.String(speler^[z].Naam);
			speler^[z].Score := 0;
			speler^[z].Kleur := (z + 7);
		END;
		
		FOR y := 0 TO ((lengte * breedte) - 1) DO		
			speelbord^[y].character := ".";
			speelbord^[y].kleur := 12;
		END;
		
		totaal := 0;
		zetten := 0;
		
		Print;
	END StartNew;
	
	
	PROCEDURE Print*;
		VAR
			x, y, z, count : INTEGER;
			temp : CHAR;
			bestandsnaam : ARRAY 30 OF CHAR;
	BEGIN
		OutExt.Clear;
		
		OutExt.String("   ");
		FOR z := 0 TO (breedte - 1) DO
			OutExt.String("+---");
		END;
		OutExt.String("+"); OutExt.Ln;
		
		count := 0;
		FOR y := 0 TO (lengte - 1) DO
			OutExt.Int((lengte - y - 1), 2);
			OutExt.String(" |");
			FOR x := 0 TO (breedte - 1) DO
				OutExt.Char(" ");
				OutExt.Color(speelbord^[count].kleur);			
				OutExt.Char(speelbord^[count].character);
				OutExt.Color(15);
				OutExt.String(" |");
				
				INC(count);
			END;
			
			OutExt.Ln;
			OutExt.String("   ");
			FOR z := 0 TO (breedte - 1) DO
			OutExt.String("+---");
			END;
			OutExt.String("+"); OutExt.Ln;
			
		END;
		
		OutExt.String("     ");
		
		FOR z := 0 TO (breedte - 1) DO
			OutExt.Int(z, 1);
			OutExt.String("   ");
		END;
		OutExt.Ln; OutExt.Ln;
		
		FOR z := 0 TO aantal DO
			OutExt.Color(speler^[z].Kleur);
			OutExt.String(speler^[z].Naam);
			OutExt.String(": ");
			OutExt.Int(speler^[z].Score, 2);
			OutExt.Ln;
		END;
		OutExt.Color(15);
		OutExt.Ln;
		
		IF (zetten # (breedte * lengte)) THEN		
			OutExt.String("De Volgende beurt is voor: ");
			OutExt.Color(speler^[beurt].Kleur);
			OutExt.String(speler^[beurt].Naam);
			OutExt.Color(12);
			OutExt.Ln; OutExt.Ln;
			OutExt.String("       - Druk op 'P' voor Pauze"); OutExt.Ln;
			OutExt.String("       - Druk op 'S' om te saven"); OutExt.Ln;
			OutExt.String("       - Druk op een andere toets om de volgende zet te beginnen"); OutExt.Ln;
			OutExt.Color(15);
			Input.Read(temp);
			IF (temp = "p") OR (temp = "P") THEN
				OutExt.String("       Het spel is gepauzeerd"); OutExt.Ln;
				OutExt.String("       Voer een commando uit in de Tool file om verder te gaan"); OutExt.Ln;
			ELSIF (temp = "s") OR (temp = "S") THEN
				OutExt.Clear;
				OutExt.String("Geef een naam in onder welke je het bestand wil opslaan:"); OutExt.Ln;
				OutExt.Color(12);
				OutExt.String("       (druk op enter om je naam te bevestigen)"); OutExt.Ln;
				OutExt.Color(15);
				x := 0;
				LOOP
					Input.Read(bestandsnaam[x]);
					IF (ORD(bestandsnaam[x]) = 13) THEN
						bestandsnaam[x] := 0X;
						OutExt.Ln;
						EXIT;
					END;
					OutExt.Char(bestandsnaam[x]);
					INC(x);
				END;
				Save(bestandsnaam);
			ELSE
				Zet;
			END;
		ELSE
			winnaar := speler^[0];
			FOR x := 1 TO aantal DO
				IF speler^[x].Score > winnaar.Score THEN
					winnaar := speler^[x];
				END;
			END;
				
			OutExt.String("Het spel is be’ndigd!"); OutExt.Ln;
			OutExt.String("       De winnaar is:"); OutExt.Ln;
			OutExt.Color(winnaar.Kleur);
			OutExt.String("              "); OutExt.String(winnaar.Naam); OutExt.Ln;
			OutExt.Color(15);
			OutExt.String("       Met een score van:"); OutExt.Ln;
			OutExt.Color(winnaar.Kleur);
			OutExt.String("              "); OutExt.Int(winnaar.Score, 0); OutExt.Ln;
			OutExt.Color(15);
		END;
				
	END Print;
	
	
	PROCEDURE Zet*;
		VAR
			x, coord1, coord2, tempcoord : INTEGER;
			temp, symbool : CHAR;
			done : BOOLEAN;
			mult : INTEGER;
			
	BEGIN
		OutExt.Ln;
		x := 0;
		done := FALSE;
		REPEAT
			IF x = 0 THEN
				OutExt.String("Geef je symbool in:"); OutExt.Ln;
				Input.Read(symbool);
				IF (ORD(symbool) # 79)  & (ORD(symbool) # 88) & (ORD(symbool) # 111) & (ORD(symbool) # 120) THEN
					OutExt.Color(1);
					OutExt.String("       ERROR: Gelieve een X of een O in te geven, probeer opnieuw"); OutExt.Ln;
					OutExt.Color(15);
				ELSE
					IF symbool = "x" THEN
						symbool := "X";
					ELSIF symbool = "o" THEN
						symbool := "O";
					END;
					OutExt.String("       Je hebt volgend symbool gekozen: ");
					OutExt.Char(symbool); OutExt.Ln;
					INC(x);
				END;
				
			ELSE 
				IF x = 1 THEN
					OutExt.String("Geef je eerste co„rdinaat op: "); OutExt.Ln;
					OutExt.String("       ");
					mult := 0;
					coord1 := 0;
					Input.Read(temp);
					
					WHILE ORD(temp) # 13 DO
						tempcoord := (ORD(temp) - 48);
						OutExt.Int(tempcoord, 0);
						coord1 := ((coord1 * (mult * 10)) + tempcoord);
						INC(mult);
						Input.Read(temp);
					END; 
					OutExt.Ln;
				ELSE
					OutExt.String("Geef je tweede co„rdinaat op: "); OutExt.Ln;
					OutExt.String("       ");
					mult := 0;
					coord2 := 0;
					Input.Read(temp);
					
					WHILE ORD(temp) # 13 DO
						tempcoord := (ORD(temp) - 48);
						OutExt.Int(tempcoord, 0);
						coord2 := ((coord2 * (mult * 10)) + tempcoord);
						INC(mult);
						Input.Read(temp);
					END; 
					OutExt.Ln;
					
					coord2 := (lengte - coord2) - 1;
				END;
				
				IF (coord1 < 0) OR (coord1 > (breedte - 1)) THEN
					OutExt.Color(1);
					OutExt.String("       ERROR: Gelieve een getal van 0 tot ");
					OutExt.Int((breedte - 1), 0);
					OutExt.String(" in te geven"); OutExt.Ln;
					OutExt.Color(15);
				ELSIF (coord2 < 0) OR (coord2 > (lengte - 1)) THEN
					OutExt.Color(1);
					OutExt.String("       ERROR: Gelieve een getal van 0 tot ");
					OutExt.Int((lengte - 1), 0);
					OutExt.String(" in te geven"); OutExt.Ln;
					OutExt.Color(15);
				ELSE
					IF x = 1 THEN
						OutExt.String("       Je hebt volgende co„rdinaat in gegeven: ");
						OutExt.Int(coord1, 0); OutExt.Ln;
						INC(x);
					ELSE
						OutExt.String("       Je hebt volgende co„rdinaat in gegeven: ");
						OutExt.Int((lengte - coord2), 0); OutExt.Ln;
						INC(x);
					END;
				END;
			END;
			IF x = 3 THEN
				IF speelbord^[(coord1 + (coord2 * breedte))].character # "." THEN
					OutExt.Color(1);
					OutExt.String("       ERROR: Er staat al een symbool op deze plaats!"); OutExt.Ln;
					OutExt.Color(15);
					x := 1;
				ELSE
					done := TRUE;
					speelbord^[(coord1 + (coord2 * breedte))].character := symbool;
					speelbord^[(coord1 + (coord2 * breedte))].kleur := (beurt + 7);
					CheckScore;
					INC(zetten);
				END;
			END;
		UNTIL done;
		Print;
	END Zet;
	
	PROCEDURE Opslaan*;
		VAR
			bestandsnaam : ARRAY 30 OF CHAR;
	BEGIN
		In.Open();
		In.String(bestandsnaam);
		Save(bestandsnaam);
	END Opslaan;
	
	PROCEDURE Save(bestandsnaam : ARRAY OF CHAR);
		VAR
			bestand: Files.File;
			bestandLoper: Files.Rider;
			temp, x, y: INTEGER;
	
	BEGIN
		IF bestandsnaam[0] = 0X THEN
			OutExt.Clear;
			OutExt.String("Geef een naam in onder welke je het bestand wil opslaan:"); OutExt.Ln;
			OutExt.Color(12);
			OutExt.String("       (druk op enter om je naam te bevestigen)"); OutExt.Ln;
			OutExt.Color(15);
			x := 0;
			LOOP
				Input.Read(bestandsnaam[x]);
				IF (ORD(bestandsnaam[x]) = 13) THEN
					bestandsnaam[x] := 0X;
					OutExt.Ln;
					EXIT;
				END;
				OutExt.Char(bestandsnaam[x]);
				INC(x);
			END;
			Save(bestandsnaam);
		ELSE		
			bestand := Files.New(bestandsnaam);
			Files.Set(bestandLoper, bestand, 0);
			
			Files.WriteInt(bestandLoper, breedte);
			Files.WriteInt(bestandLoper, lengte);
			Files.WriteInt(bestandLoper, aantal);
			Files.WriteInt(bestandLoper, beurt);
			Files.WriteInt(bestandLoper, totaal);
			Files.WriteInt(bestandLoper, zetten);
		
			FOR temp := 0 TO aantal DO
				Files.WriteString(bestandLoper, speler^[temp].Naam);
				Files.WriteInt(bestandLoper, speler^[temp].Score);
			END;
		
			FOR y := 0 TO ((breedte * lengte) - 1) DO
				Files.WriteInt(bestandLoper, ORD(speelbord^[y].character));
				Files.WriteInt(bestandLoper, speelbord^[y].kleur);
			END;
		
			Files.Register(bestand);
		
			OutExt.String("Spel opgeslagen onder de naam: ");
			OutExt.String(bestandsnaam);
		END;
	END Save;
	
	PROCEDURE Laden*;
		VAR
			bestandsnaam : ARRAY 30 OF CHAR;
	BEGIN
		In.Open();
		In.String(bestandsnaam);
		Load(bestandsnaam);
	END Laden;
	
	PROCEDURE Load(bestandsnaam : ARRAY OF CHAR);
		VAR
			bestand: Files.File;
			bestandLoper: Files.Rider;
			temp, x, y: INTEGER;
	
	BEGIN
		IF bestandsnaam[0] = 0X THEN
			OutExt.Clear;
			OutExt.String("Geef de naam in van het bestand dat je wil openen:"); OutExt.Ln;
			OutExt.Color(12);
			OutExt.String("       (druk op enter om je naam te bevestigen)"); OutExt.Ln;
			OutExt.Color(15);
			x := 0;
			LOOP
				Input.Read(bestandsnaam[x]);
				IF (ORD(bestandsnaam[x]) = 13) THEN
					bestandsnaam[x] := 0X;
					OutExt.Ln;
					EXIT;
				END;
				OutExt.Char(bestandsnaam[x]);
				INC(x);
			END;
			Load(bestandsnaam);
		ELSE
			bestand := Files.Old(bestandsnaam);
		
			IF (bestand # NIL) THEN
				Files.Set(bestandLoper, bestand, 0);
				
				Files.ReadInt(bestandLoper, breedte);
				Files.ReadInt(bestandLoper, lengte);
				Files.ReadInt(bestandLoper, aantal);
				Files.ReadInt(bestandLoper, beurt);
				Files.ReadInt(bestandLoper, totaal);
				Files.ReadInt(bestandLoper, zetten);
				
				NEW(speelbord, (breedte * lengte));
				NEW(speler, (aantal+1));
				
				FOR temp := 0 TO aantal DO
					Files.ReadString(bestandLoper, speler^[temp].Naam);
					Files.ReadInt(bestandLoper, speler^[temp].Score);
					speler^[temp].Kleur := (temp + 7);
				END;
			
				FOR y := 0 TO ((breedte * lengte) - 1) DO
					Files.ReadInt(bestandLoper, temp);
					speelbord^[y].character := CHR(temp);
					Files.ReadInt(bestandLoper, speelbord^[y].kleur);
				END;
				
				OutExt.Open();
				Print;
			ELSE
				OutExt.Open();
				OutExt.Clear;
				OutExt.String("Spel niet gevonden (");
				OutExt.Color(1);
				OutExt.String(bestandsnaam);
				OutExt.Color(15);
				OutExt.String(")");
				OutExt.Ln();
			END;
		END;
	END Load;
	
	PROCEDURE CheckScore;
		VAR
			tempscore: INTEGER;
	
	BEGIN
		tempscore := totaal;
		totaal := 0;
		
		Horizontaal;
		Verticaal;
		DiagonaalLinks;
		DiagonaalRechts;
		
		speler^[beurt].Score := speler^[beurt].Score + (totaal - tempscore);
		
		IF (totaal - tempscore) = 0 THEN
			IF (beurt # aantal) THEN
				INC(beurt);
			ELSE
				beurt := 0;
			END;
		END;
	END CheckScore;
	
	PROCEDURE Horizontaal;
		VAR
			x, y : INTEGER;
	BEGIN
		FOR y := 0 TO (lengte - 1) DO
			FOR x := 0 TO (breedte - 3) DO
				IF (speelbord^[((y*breedte) + x)].character = "O") 
					& (speelbord^[((y*breedte) + x) + 1].character = "X") 
					& (speelbord^[((y*breedte) + x) + 2].character = "O") THEN
					
						INC(totaal);
				END;
			END;
			x := x + 3;
		END;
	END Horizontaal;
	
	PROCEDURE Verticaal;
		VAR
			x, y : INTEGER;
	BEGIN
		FOR y := 0 TO (lengte - 3) DO
			FOR x := 0 TO (breedte - 1) DO
				IF (speelbord^[((y*breedte) + x)].character = "O") 
					& (speelbord^[((y*breedte) + x + breedte)].character = "X") 
					& (speelbord^[((y*breedte) + x + (2 * breedte))].character = "O") THEN
					
						INC(totaal);
				END;
			END;
		END;
	END Verticaal;

	PROCEDURE DiagonaalLinks;
		VAR
			x, y : INTEGER;
	BEGIN
		FOR y := 2 TO (lengte - 1) DO
			FOR x := 2 TO (breedte - 1) DO
				IF (speelbord^[((y*breedte) + x)].character = "O") 
					& (speelbord^[((y*breedte) + x - (breedte + 1))].character = "X") 
					& (speelbord^[((y*breedte) + x - 2 * (breedte + 1))].character = "O") THEN
					
						INC(totaal);
				END;
			END;
		END;
	END DiagonaalLinks;

	PROCEDURE DiagonaalRechts;
		VAR
			x, y : INTEGER;
	BEGIN
		FOR y := 2 TO (lengte - 1) DO
			FOR x := 0 TO (breedte - 3) DO
				IF (speelbord^[((y*breedte) + x)].character = "O") 
					& (speelbord^[((y*breedte) + x - (breedte -1))].character = "X") 
					& (speelbord^[((y*breedte) + x - 2 * (breedte - 1))].character = "O") THEN
					
						INC(totaal);
				END;
			END;
		END;
	END DiagonaalRechts;


BEGIN
END OXO.
OXO.Tool

Code: Select all

(*
	Description: Een OXO spelletje
	Author: Nick De Frangh
	Date Created: 24/12/2005
	Versie : 1.5.1
	----------------
	Future features;
		- Code verduidelijken en optimalizeren 
        - Hight scores bijhouden
        - Speler kan kleur zelf kiezen?
                  
	Suggesties: Mail naar Nickman@pandora.be
					   Of post op brandless
	----------------
	ChangeLog V1.5.1
		- Bug voor einde van het spel er uit gehaald
	----------------
	ChangeLog V1.5:
		- Variabele veldgrootte (in te stellen via parameter)
		- Raster verbeterd
		- Output verbeterd
		- Input intuitiever gemaakt
	----------------
	ChangeLog V1.3:
		- Eind van het spel voorzien
		- Elke speler heeft nu een eigen spelkleur
		- Kleine code optimalizatie
		- Output verbeterd
	----------------
	ChangeLog V1.2:
		- Menu opties toegevoegd na elke zet
		- Mogelijkheid om je spel na elke zet makkelijk te saven
		- Kleuroutput voor reed ingegeven karakters
		- bug voor negatieve scrore uitgehaald (vermoedelijk)
*)

Builder.Compile \s2
	OutExt.Mod
	OXO.Mod
	~
	
Builder.Compile \f2*

System.Free
	OXO.Mod
	OutExt.Mod

OXO.StartNew 4 3 2 "Nickman" "Donaldini"~
OXO.Zet
OXO.Opslaan "Nickman.sav"~
OXO.Laden "Nickman.sav"~
OXO.Print~
Je begint het spel dus met StartNew (Logisch niet 8) ). Daar kan je kiezen met hoeveel je gaat spelen en de namen.
Dan moet je per keer dat je iets wil plaatsen op Zet klikken.
Saven en Loaden zullen jullie al wel kennen zeker?

Greetz[/img]

Posted: Sat Dec 24, 2005 11:44 pm
by Nick
Shinta wrote:Mooie werkwijze, spijtig daget bij mij ni werkt, misschien ontbreekt de testmodule of een freaking handleiding :wink: .
EDIT : Amai woef agij dees oefening krijgt dan zien we u is huile :lol: .
Bwa neuh eigelijk ni, kgaan da ook is probere.

Posted: Sun Dec 25, 2005 1:35 am
by Nickman
OXO spel geupdate naar versie 1.2 :).
Morgen eventueel nog verder werken ;)

Posted: Sun Dec 25, 2005 11:01 am
by Shinta
Nickman wrote:OXO spel geupdate naar versie 1.2 :).
Morgen eventueel nog verder werken ;)
ahaha, zalig :D
wa is het nut van een pauze functie in een OXO spel ;) snu ni daze u neerknalle age ff AFK zijt he :D .

Posted: Sun Dec 25, 2005 11:12 am
by Nickman
Da's waar ja, maar als ik dat er niet in zou steken dan moet ge ofwel:
- blijven verder spelen tot het spel uit is (en dan zou het dnekik nog ni stoppen want da moet ik nog maken :D)
- Stoppen door het spel te bewaren
- Oberon afsluiten (the hard way!)
Omdit die anders blijft wachten op input :)

Posted: Sun Dec 25, 2005 2:16 pm
by Norfolk
Nickman wrote:Da's waar ja, maar als ik dat er niet in zou steken dan moet ge ofwel:
- blijven verder spelen tot het spel uit is (en dan zou het dnekik nog ni stoppen want da moet ik nog maken :D)
- Stoppen door het spel te bewaren
- Oberon afsluiten (the hard way!)
Omdit die anders blijft wachten op input :)
- PC afsluiten (a harder way)
- De stroomschakelaar uitzetten (another harder way)
:D