Bonjour, j'ai commencé hier à programmer un tetris pour un pote, mais le problème qui m'est de suite apparu est que quand la piece descend, pour le faire tourner ou la deplacer horizontalement, le joueur doit pourvoir appuyer sur une touche sans que cela ne bloque le jeu. Les fonctions que je connais sont getch, scanf ou ce genre, c'est à dire que cela bloque le programme tant qu'aucune touche n'a été pressé. Si quelqu'un sait comment pallier à ce problème je lui serais reconnaissant de bien vouloir m'aider, merci d'avance !
Ouais je fais un tetris en mode console parceque je ne connais rien en win32. Si tu pouvais m'en dire plus ou m'indiquer un lien où je pourrais avoir des infos sur les threads ça serait super car je ne connais pas ces trucs du tout.
Si ces threads sont toute fois trop compliqués, je pense que je vais me mettre au win32 mais c'est un defis qu'on m'a lancé alors j'aimerais bien arriver à bout !
Premierement, si tu débute, je te déconseil les threads, 2emement, si tu veut faire une app. win32 pure, sans dx ou opengl, je te conseil un language de plus haut niveau, comme C# ou Delphi. 3emement, si tu veut vraiment faire un beau jeu en 2 ou 3d, utilise dx ou OpenGL, mais je te conseil OpenGL, il est plus facile a apprendre, et la syntax est meilleur a mon avis.
Si tu a d'autre question, n'ésite pas...
PS, j'ai fait un tetris en 3d il y a quelque temp, mais la source est asser grosse et compliquer pour qqun qui debute en c/c++.
Voicci le lien:
http://www.freewebs.com/vortex666/Tetrix3D.rar
En fait, ce qui m'amuse c'est de realiser un tetris dans une simple console, sans aucun graphisme et loin du 3d des nouveaux jeu.
Je programme pas mal mais jamais de jeux ou d'applications win32, pas mal pour les microcontroleurs pics, donc pour ainsi dire j'y connais rien pour les jeux... La methode des threads m'a l'air interressante, mais j'aimerai savoir si elle est compatible avec dev c++. Si l'opengl ou dx est vraiment plus interressante je veux bien m'y mettre. J'ai deja realisé un puissance 4 en debut d'année pour un projet et le tetris devrait etre du meme style alors si tu veux le voir pour comprendre ce que j'aimerais produire je peux l'envoyer. Merci pour ta rapidité vortex666 !!
Les thread font partie de l'API win32, alors oui, tu peut les utiliser avec DevCpp. Le problemme avec les threads, c'est qu'il est possible d'ecrire dans la meme variable, au meme momment, dans 2 ou plusieur thread a la fois, ce qui fait planter le programme a coup sur. Il fatu alors utiliser les fonctions de sycronisations, et ca peut prendre quelque temp pour tout comprendre. Si tu regarde mon jeu, j'utilise les thread pour faire jouer l'ordi (quand on attend 5 sec dans le menu principal). Et je doit dire que ce ne fut pas chose facile...
Merci beaucoup pour les threads, je vais essayer de l'utiliser pour mon petit tetris, quand j'aurai bien sûre analysé le mode d'emploi, ce que je me hate de faire !
L'openGL sert quand a lui a creer des graphismes non ? J'aimerai m'y mettre aussi car son utilisation permet de realiser des jeux assez evolués non ? Le probleme est que je n'ai absolument aucune notion là-dedans...
Je suis presentement en train de develloper une librarie d'un moteur 3d baser sur le code de ces 2 jeux justement. Il est a peu pres fini, et il marche tres bien. Avec ca, tu peut loader un model 3d en une ligne de code, les textures aussi, le son, ect... Bien sur, une connaisance de base en OpenGL est requise pour implementer la function qui dessine la scene, mais c deja beaucoup moin compliquer que de tout faire soit meme.
Exemple:
#pragma comment(lib, "Vortez3DEngine.lib")
#include "Vortez3DEngine.h"
class CEngine : public CVortez3DEngine {
public:
void InitEngineExt();
void ShutdownEngineExt();
void RenderScene();
//void UpdateScene();
void OnKeyDown(UINT KeyPressed);
public:
void DrawModel(CModel *pModel);
};
CModel ColumnModel;
//-----------------------------------------------------------------------------
// Name : WinMain() (Application Entry Point)
// Desc : Entry point for program, App flow starts here, end here.
//-----------------------------------------------------------------------------
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
pEngine = new CEngine;
if(pEngine->InitEngine(&hInstance, 0,0,800,600,1)){
pEngine->StartEngine();
}
pEngine->ShutdownEngine();
SAFE_DELETE_OBJECT(pEngine);
return 0;
}
void CEngine::InitEngineExt()
{
pEngine->Camera.SetDefaultValue(10.0f,25000.0f, 0.0f,60.0f, 0.0f,0.0f,0.0f, 5000.0f, 1.0f,250.0f, 0.0f,360.0f,-90.0f,90.0f);
pEngine->Camera.SetCameraRotation(0.0f, 25.0f);
ColumnModel.LoadModelFromFile("Column.M3D");
ColumnModel.LoadPrimaryTextureID("Column.bmp", 0, 0);
}
void CEngine::ShutdownEngineExt()
{
ColumnModel.FreeModelData();
}
void CEngine::OnKeyDown(UINT KeyPressed)
{
}
void CEngine::DrawModel(CModel *pModel)
{
pEngine->EnableVAs(VA_VTN);
pModel->BindPrimaryTextureID();
pModel->BindVAs(VA_VTN);
pModel->DrawModel();
pEngine->DisableVAs(VA_VTN);
}
void CEngine::RenderScene()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
// Set OpenGL for 3D Drawing
pEngine->Set3DMode(10, 25000);
glEnable(GL_LIGHTING);
glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST);
// Set the color to pure white
glColor3f(1.0f, 1.0f, 1.0f);
// Begin 3d drawing
glPushMatrix();
pEngine->Camera.SetCamera();
DrawModel(&ColumnModel);
glPopMatrix();
//Draw the FPS
DrawFPS();
// Swap the back buffer, drawing the current scene on the screen
SwapBuffers(pEngine->GethDC());
}
/*void CEngine::UpdateScene(){}*/
Ce code ne se compilera pas, car il te manque la lib, mais si ca t'interresse, je te la donnerai, et t'expliquerai comment ca marche plus en detail...
PS: Tout le code pour crée la fenetre windows et l'initialisation d'opengl sont automatique. Et les functions InitEngineExtm ShutDownEngineExt, OnKeyDown, ect sont appeler par l'engin automatiquement aussi.