Προς το περιεχόμενο

erotisi se c++


tsouk

Προτεινόμενες αναρτήσεις

Δημοσ.

Ftiaxno ena programma skakiou se c++ kai thelo na to kano na

skeftetai thn ora pou exei paiksei thn kinish tou kai perimenei

apantish apo to xrhsth.To provlima mou einai oti den ksero pos tha sinexisei to programma na trexei kai na perimenei gia input taytoxrona.

Einaiaparaithto na xrhsimopoihso threads h mhpos yparxei allos tropos?

An einai aparethto kserei kanenas kanena kalo tutorial gia threads se c++?

Eyxaristo prokatavolika.

Δημοσ.

Δεν προσδιορίζεις το Λ.Σ. σου .. οπότε αν μιλάμε για Windows και GUI:

 

Θα πρέπει να φτιάξεις ένα Thread (CreateThread) το οποίο θα έχει σαν σκοπό την συνεχή αξιολόγηση της θέσης των κομματιών, κατηγοριοποιώντας κάθε φορά τις καλύτερες δυνατές για τον υπολογιστή κινήσεις.

 

Το Thread τρέχει συνεχεία ανεξάρτητα από το τι συμβαίνει στην εφαρμογή (process)..

 

Όταν ο χρήστης κάνει μια κίνηση μπορείς να στείλεις κάποιο signal (δες το Synchronization στο Windows SDK Help) στο συγκεκριμένο Thread ή να το παγώσεις (SuspendThread) και να παίξεις την καλύτερα αξιολογημένη κίνηση του, ως τότε, και φυσικά ύστερα να το επαναφέρεις (ResumeThread)..

 

Ο προγραμματισμός των παραπάνω δεν είναι εύκολη υπόθεση (ειδικά αν βασιστείς στο WinAPI) αλλά συνήθως οι μεγάλοι compilers παρέχουνε ειδικές ρουτίνες που διευκολύνουν την κατάσταση.. (ως και ολόκληρα components –C/C++ Builder)

 

Από την άλλη, μπορείς να κάνεις παρόμοια δουλεία με το «Thread» χρησιμοποιώντας έναν Timer.. η λογική είναι ίδια, ο Timer (SetTimer, WM_TIMER κοκ..) εκτελείται κάθε X nanoseconds (επιβαρύνοντας συνήθως λιγότερο το σύστημα) αξιολογώντας τις ως τώρα κινήσεις..

 

Όταν ο χρήστη κάνει μια κίνηση, εσύ διαβάζεις την καλύτερη αξιολόγηση που έχει κάνει ο Timer ως τότε και συνεχίζεις το παιχνίδι και σε αυτή την περίπτωση ο κώδικας του Timer εκτελείται ανεξάρτητα από την υπόλοιπη εφαρμογή και είναι ευκολότερος στο implementation..

 

Τέλος, μπορείς να τα παρακάμψεις όλα αυτά και να υπολογίσεις την επόμενη κίνηση σου αφού ο χρήστης έχει κάνει την κίνηση του (εγώ αυτό θα έκανα).

 

Α! Αν τέλος, προγραμματίζεις σε περιβάλλον Console τότε μπορείς να κάνεις και

>for(;;){ while(!kbhit()){ /* Thinking .. */ } /* User interact */ getch(); }

!

 

Καλή τύχη !

 

Υ.Γ. Δεν έχω υπόψη μου κάποιο tutorial, οπότε σε συμβουλεύω να ψάξεις το Help του compiler σου ή το Windows SDK Help !

Δημοσ.

Directx eyxaristo nomizo oti h grammh kodika pou mou edoses einai

ayto pou thelo.

Ektos an h getch() mplokarei to programma kai perimenei na paththei koumpi.Mipos ksereis?Einai h idia me the getchar()?

Xrisimopoio ton compiler g++ se Linux.Pros to paron douleyo se

perivalon console alla argotera den apoklietai na to sindeso me to

XBOARD.(opensourse gui tou linux gia skaki.To analogo tou winboard

gia windows).

Δημοσ.
Directx eyxaristo nomizo oti h grammh kodika pou mou edoses einai

ayto pou thelo.

Ektos an h getch() mplokarei to programma kai perimenei na paththei koumpi.Mipos ksereis?Einai h idia me the getchar()?

Xrisimopoio ton compiler g++ se Linux.Pros to paron douleyo se

perivalon console alla argotera den apoklietai na to sindeso me to

XBOARD.(opensourse gui tou linux gia skaki.To analogo tou winboard

gia windows).

 

:idea: Η γραμμή κώδικα που σου έδωσα κάνει το εξής:

 

Εκτελεί τις εντολές που υπάρχουν στο while μέχρι να πατηθεί κάποιο πλήκτρο (οπότε η kbhit()==1 άρα το while τερματίζεται), την ίδια στιγμή ακολουθεί η εντολή getch() που λαμβάνει το πλήκτρο που πατήθηκε καθαρίζοντας τον keyboard buffer .. ώστε να δουλέψει ξανά το while, ύστερα η όλη διαδικασία επαναλαμβάνεται ( for ) .

 

Όχι η getch δεν παγώνει το πρόγραμμα καθόλου :-)

 

Καλούς πειραματισμούς..

 

Παραθέτω τον κώδικα λίγο πιο ανεπτυγμένο:

(Borland C/C++ 5.5 / Windows XP Console)

 

>#include <stdio.h>
#include <conio.h>

void main()
{
 for(;;)
  {
     while(!kbhit())
      {
        /* Thinking .. */       
        printf(" Thinking... \n");
      }

     /* User interact */
     printf("key pressed ... \n");  

     /* Get key, clear keyboard buffer */
     if(getch()==0x1b)
      {
        printf(" User pressed ESC.. bye!\n");
        break; /* ESC */
      }
  }
}

Δημοσ.

tsouk , i getchar() den pernei to char pou 8a dwsei o user mexri na patisei enter o xristis enw i getch() pernei ton xaraktira xoris na xreiazete o user na patisei enter.

 

Pantws se genikes grammes simfwnw me to skeptiko pou edwse kai o DirectX. Episis sou proteinw na deis kai kana sample sto net kai 8elw na sou prwtinw na kaneis to computer na xrisimipoiei kai recursion mexri kapoio simeio oste na vriskei tin pio swsti pi8ani kinisi kai na min kanei teleios random moves.Gia auto des kapoio paradeigma tic tac toe opou to computer kanei recursion mexri na vrei tin pio swsti kinisi se enan pinaka 4x4 gia na katalaveis akrivos ti ginete.Sto skaki omos 8a einai poly pio argo.

Δημοσ.

Paidia eyxariso gia thn voithia.

directx doulepse teleia.Vevaia h kbhit() den yparxei sthn gcc alla

vrika kodika pou thn hlopoiei sto web xrhsimopoiontas thn select.Tora

mporei na skeftete kai thn ora pou perimenei gia input.

Maniake profanos to programma xrhsimopoiei recursion.Den ginetai kai

alios alloste(theoritika mporei kai na ginetai kathos theoritika gia kathe

recursive algorithmo yparxei enas antistoixos xoris recursion alla praktika

einai toso poliploko pou prepei na einai sxedon adynato.)Sigkekrimena

xrisimopoio mia morfh tou algorithmou alpha-beta,pou einai mia ekseligmenh morfh tou pio gnostou minimax.

To programma eidh paizei aksioprepes skaki(yahoo ELO 1600) kai an kapoios thelei mporo na tou to steilo na paiksei(se linux).An malista paizei kai sxetika kalo skaki akoma kalitera gia na mou pei pou nomizei oti to programma exei adynamies kai na prospathiso na to diorthoso.Epeidh den exei akoma grafika xreiazetai kai mia skakiera.

Tora thelo(vasika prepei oxi aplos thelo kathos einai ergasia) na to kano parallilo xrhsimopoiontas mpi.Mpi den ksero kalo opote pithanon na epaneltho me nees apories.

Hayzel yparxoun polla kala sites pou eksigoun pos na ksekinisei kaneis me programmatismo skakiou.An endiaferese -h opoiosdhpote allws-

pes mou na sou steilo ta links.

Δημοσ.

Paidia den exo link gia A.I genika .

Mono gia skaki(pou mporoun vevaia na xrhsimopoihthoun kai

gia alla paixnidia opws ntama,skor4,k.t.l)

 

http://www.seanet.com/~brucemo/topics/topics.htm

 

http://www.gamedev.net/reference/programming/features/chess1/

 

http://www.galahadnet.com/chess/chessprg/

 

http://www.computerschach.com/freeware/bitboards.htm

 

http://students.cs.byu.edu/~snell/Classes/CS584/projectsF99/steele/report.html

 

 

Maniake ton kodika mou mporeis na ton vreis sto:

http://www.doc.ic.ac.uk/~at102/

 

Pantos proeidopoio pws einai kakogramenos kai xwris polla sxolia(eidika

to arxeio search.cpp pou exei ton algorithmo kai to peirazo kathe mera)

Sou exo kai to makefile opote theoritika den tha exeis provlima na

to trekseis.Ta .dat einai ola aparetita gia to programma.

Elpizo na sou doulepsei .An oxi mou les an kai oi gnwseis mou se linux

einai polu periorismenes kai den ksero an tha mporeso na se voithiso.

Kai ego se allous trexo gia voithia se kathe provlima.

Epishs exei akoma merika bug opote mhn sou fanei periergo an gia

paradeigma sou kanei mat me ton vasilia!

Ta arxeia report* einai perita kai den ta xreiazesai.

 

Tis kinhseis sto programma tis dineis ws ekshs:

Se oles ths kanonikes kinhseis dineis ta dyo tetragona

me mia payla sthn mesh p.x e2-e4

Sto roke ta dyo tetragona me thn kinhsh tou vasilia kai meta -c

p.x e1-g1-c gia to mikro roke tou leykou

Gia kinhsh en-passant kanonika ta dyo tetragona me thn kinhsh tou pioniou kai meta -ep .px a6-b7-ep

Kai telos otan theleis na proothiseis pionh sthn teleytaia grammh exeis tis

parakatw epiloges analoga me to ti theleis na ginei to pioni:

a7-a8-q (vassilisa)

a7-a8-r(pyrgos)

a7-a8-b(trelos)

a7-a8-n(alogo)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...