Gå til innhold

Seatmap til lan partys


Anbefalte innlegg

Hei, jeg lurer på hvor jeg kan få tak i Seatmap til et lan party, eller hvor jeg kan lære det (tutorial), jeg har prøvd og lære meg via php.net, (imagecreate) men får det absolutt ikke til.

 

Derfor lurer jeg på om dere vet hvor jeg kan få tak i bare seatmappen (det er det eneste jeg trenger)...

 

Hilsen

 

/.Fredrik

Lenke til kommentar
Videoannonse
Annonse

Nei.. jeg har drevet med .php i godt over et år nå, har til og med et nybegynner kurs i det (*Skryte* :p ).

Jeg driver og koder et CMS (Sånn "lære av mine feil" CMS), så skal jeg lage en side for et dataparty som foregår på skolen min, derfor trenger jeg seatmappen...

Har mest lyst og lære dette, men vis det finnes et ferdig script, så er det helt i orden...

 

/.Fredrik

Lenke til kommentar

lag et skjema som indikerer plassene. det bør være baser på et rutenett. prøv å tenk det at du tegner på rutepapir og du kan kun tegne plasser i rutene. prøv å få det til å likne mest mulig på de virkelige plassene. post et bilde når du er ferdig så kan jeg forsøke å hjelpe deg videre.

 

du må også fortelle meg hvilke egenskaper en plass skal ha. for eksempel (tom, reservert, opptatt, betalt, admin)

Endret av grimjoey
Lenke til kommentar

et seat map er en oversikt av sitteplasser i et dataparty hvor man ser hvilke plasser som er opptatt og man kan klikke for å holde av plass også videre. er det dette du mener du vil lage?

 

i så fall trenger du først å fremst å vite hvordan plassene ser ut i fugleperspektiv. en oversikt over plassene med andre ord.

Lenke til kommentar

bilde

 

edit: det er bare for å ha en visuell referanse. koden vil generere bildet som kommer til å blir brukt til slutt

 

edit:

du trenger en tabell:

(bruker_id type må du ha lik som brukertabellen din)

 

CREATE TABLE kalldenhvaduvil (id_x INT(3) NOT NULL, id_y INT(3) NOT NULL, bruker_id INT(11) DEFAULT NULL, type INT(1) DEFAULT NULL, betalt BIT(1) DEFAULT NULL, PRIMARY KEY(id_x, id_y));

 

så sier vi at:

 

type:

0 er Tom

1 er Opptatt

2 er Admin (VIP)

 

edit: typo

Endret av grimjoey
Lenke til kommentar

Skal du bare ha Rutenettet, eller plassene og alt?

 

EDIT: Nå har jeg fikset rutenett med plasser og hele pakken, du trenger ikke og bry deg om de blå og grå plassene, siden disse ikke vil bli brukt.

 

De oransje plassene er admin (vip) og de grønne er vanlige plasser.

 

(Det skal være flere plasser, men vil lære litt, så tenkte jeg kunne ordne dem selv)

post-91173-1200004714_thumb.png

Endret av Famen
Lenke til kommentar

rutenett.gif

 

har du plasser som en hestesko for eksempel legger du alle plassene inn i tabellen med koordinatene som id_x og id_y. prikken ligger på koordinat 1,2. for å legge inn plassen i tabellen bruker man

 

INSERT INTO kalldenhvaduvil(id_x, id_y) VALUES(1, 2);

 

edit:

skjema og kode for å legge inn plasser da fikser du sikkert selv om du trenger det.

 

er du interesert i å skrive objekt orientert (ikke min sterkeste side men kan bli interesant)?

jeg vil gjøre minst mulig og la deg prøve å finne ut av ting selv.

 

du må legge inn noen plasser i tabellen, lage kode for å endre status på en plass. legge til eller fjerne bruker (for å legge en bruker til en plass setter du bare bruker_id i plass tabellen til en bruker id i brukertabellen). kode for å tegne selve plassoversikten, markere plassene med farger avhengig av status, og lage areamap for at brukerene skal kunne klikke og bestille plass.

 

alt dette etter hva du selv ønsker.

 

for å tegne plassene spesifiserer du høyde og bredde på hver enkel plass. koordinatene i plass tabellen er en referanse til det øverste venstre hjørnet på en plass.

 

$seat['width'] = 40; // oppgis i pixler

$seat['height'] = 30;

 

først må vi regne ut bredden og høyden på det kommende oversikts bildet.

 

$res = mysql_query( 'SELECT MAX(id_x), MAX(id_y) FROM kalldenhvaduvil;' );

$row = mysql_fetch_row( $res );

 

$seat['totalwidth'] = $seat['width'] * $row[0];

$seat['totalheight'] = $seat['height'] * $row[1];

 

$img = imagecreatetruecolor( $seat['totalwidth'], $seat['totalheight'] );

 

$white = imagecolorallocate($img, 255, 255, 255);

$black = imagecolorallocate($img, 0, 0, 0);

 

imagefilledrectangle($img, 0, 0, $seat['totalwidth'], $seat['totalheight'], $white);

 

// så må vi tegne firkanter for hver aktuelle plass. først hente database info

 

$res = mysql_query( 'SELECT * FROM kalldenhvaduvil;' );

while ( $row = mysql_fetch_assoc( $res ) ) {

$seats[] = $row;

}

 

foreach ( $seats as $s ) {

$displace_x = $s['id_x'] * $seat['width'];

$displace_y = $s['id_y'] * $seat['height'];

imagerectangle( $img, $displace_x, $displace_y, ( $displace_x + $seat['width'] ), ( $displace_y + $seat['height'] ), $black);

}

 

ved nermere ettertanke kommer vi til å oversette koordinater fra tabellen til pixler ofte, så vi bør skrive en funksjon for det.

 

men du må gjerne teste denne koden og avslutte med:

 

header('Content-type: image/gif');

imagegif($img);

imagedestroy($img);

 

og se om det blir noe ut av det.

...

 

legger meg nå, men titter innom i morgen.

Endret av grimjoey
Lenke til kommentar

du har helt rett. har rettet det nå pluss et par andre feil. sikkert flere også. har ikke testet koden.

 

det holder det bildet du lagde. jeg lagde et (styggere :() selv for å illustrere hvordan plassene skal legges inn i tabellen.

 

jeg legger meg nå. er det noe du ikke forstår som jeg kan forklare nermere? håper du kommer litt i gang med dette og finner ut av en del ting selv. du kan forsøke å skrive en funksjon som oversetter koordinater fra tabellen til koordinater i bildet (koden finnes i innlegget mitt, du må bare forstå den og gjøre den om til en funksjon)

 

// konseptkode

function translate_seat_to_img(seat_x, seat_y, seat_width, seat_height) {

return array(image_x, image_y);

}

Endret av grimjoey
Lenke til kommentar

Nå har jeg kommet så langt, jeg tror ikke at function jeg laget er rett! (det er garantert). men dette er det jeg er kommet til før jeg legger meg..

 

seatmap.php

Klikk for å se/fjerne innholdet nedenfor
<?php
header('Content-type: image/gif');
// oppgis i pixler
$seat['width'] = 30;
$seat['height'] = 30;
include_once("db_connect.php");
$res = mysql_query( 'SELECT MAX(id_x), MAX(id_y) FROM seatmap' );
$row = mysql_fetch_row( $res );

$seat['totalwidth'] = $seat['width'] * $row[0];
$seat['totalheight'] = $seat['height'] * $row[1];

$img = imagecreatetruecolor( $seat['totalwidth'], $seat['totalheight'] );

$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, 0, 0, 0);

imagefilledrectangle($img, 0, 0, $seat['totalwidth'], $seat['totalheight'], $black);

// så må vi tegne firkanter for hver aktuelle plass. først hente database info

$res = mysql_query( 'SELECT * FROM seatmap' );
while ( $row = mysql_fetch_assoc( $res ) ) {
$seats[] = $row;
}

foreach ( $seats as $s ) {
$displace_x = $s['id_x'] * $seat['width'];
$displace_y = $s['id_y'] * $seat['height'];
imagerectangle( $img, $displace_x, $displace_y, ( $displace_x + $seat['width'] ), ( $displace_y + $seat['height'] ), $black);
}

function seat_img($displace_x, $displace_y, $seat_width, $seat_height) {
return array($image_x, $image_y);
}
?>
<?php
imagegif($img);
imagedestroy($img); 
?>

Lenke til kommentar

en funksjon er egentlig bare en måte å pakke inn kode på.

 

har du en kode du kommer til å bruke flere steder kan det være lurt å skrive en funksjon.

 

for eksempel dersom du alltid skriver mysql_query( 'etterllerannet' ) or die( mysql_error() ); kan du lage en funksjon som gjør at du slipper å gjenta det samme hele tiden.

 

function my_query( $sql ) {
 $res = mysql_query( $sql ) or die( mysql_error() );
 return $res;
}

 

senere da kan du skrive my_query('ettellerannet'); og den vil gjøre det samme som mysql_query( 'etterllerannet' ) or die( mysql_error() );

 

en funksjon kan enten være uten argumenter

 

function connect() {
 $link = mysql_connect( 'host', 'username', 'password' );
 mysql_select_db( 'databasenavn', $link );
 return $link;
}

 

eller den kan være med argumenter

 

function connect( $host, $username, $password, $dbname ) {
 $link = mysql_connect( $host, $username, $password );
 mysql_select_db( $dbname, $link );
 return $link;  
}

 

du kan også sette standard verdier i argumenter som blir gjeldende dersom ingen argumenter er gitt når funksjonen eksekveres.

 

function connect( $host = 'localhost', $username = 'root', $password = 'rewt' , $dbname = 'default' ) {
 $link = mysql_connect( $host, $username, $password );
 mysql_select_db( $dbname, $link );
 return $link;  
}

 

 

return er en spesialfunksjon som kun gjelder inne i funksjoner. den bestemmer hva funksjonen skal returnere etter at den har eksekvert. funksjonen blir stoppet av return. kode som er etter return blir ikke eksekvert, så dersom du skal ha flere returns i en funksjon må du ha flow control i tillegg (if, elseif, else, .....)

 

function foo( $bar ) {
 if ( $foo < 5 ) return 'mindre en fem';
 elseif ( $foo > 5 ) return 'større en fem';
 else return 'erlik 5';
}

echo foo( 1 );
echo foo( 5 );
echo foo( 6 );

 

en annen ting verdt å nevne er noe som kalles scope. det handler om hvor en variabel er tilgjengelig.

 

$variabel = 'test tekst';

function test() {
 echo $variabel;
}

test();

 

denne vil ikke virke fordi variabelen $variabel er definert utenfor funksjonen.

 

for å få variabelen til å være tilgjengelig for funksjonen kan vi gjøre to ting. enten la den passere via et argument, eller spesifikt fortelle php at funksjonen skal benytte den variabelen.

 

$variabel = 'test tekst';

function test($variabel) {
 echo $variabel;
}

test($variabel);

 

eller:

 

$variabel = 'test tekst';

 

function test() {
 global $variabel; // dette forteller php at funksjonen skal bruke variabelen $variabel som ligger utenfor funksjonen
 echo $variabel;
}

test();

 

det finnes unntak som kalles super_globals. dette er $_POST, $_GET, $_SERVER, $_FILES, $_SESSION osv... disse er tilgjengelig inne i funksjoner uansett.

 

i php kan man også skrive funksjoner inne i funksjoner. jeg vet ikke om noe annet programmerings språk som tillater det.

 

function a( $arg = null) {
 function b() {
echo 'this is function b';
 }
 if ( $arg ) b();
}

b(); //fungerer ikke fordi den ligger inne i funksjon a();

a( true ); // vil skrive 'this is function b' til output.

 

funksjoner inne i funksjoner kan kun brukes inne i funksjonen som holder funksjonene.

 

edit: grunnen til at du får et sort bilde er at jeg skrev feil når jeg satt bakgrunnsfarge. endre $black til $white i imagefilledrectangle(); like under imagecreatetruecolor()

 

du kan også endre på $width og $height. gjør de litt mindre så slipper bildet å bli så stort

Endret av grimjoey
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...