OpenGL ve C ile Yılan Oyunu

Başlatan endryz, 29 Temmuz 2011 - 04:26:36

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

endryz

bir klasik yılan oyunu denemesi. (0, 0) noktasından doğuyor yılan, sonrası bilindik. F1 ile oyundan çıkıyoruz, yön tuşları ise ok tuşları. duvara çarpınca veya yılan kendine değince 2 saniye sonra oyun bitip kapanıyor. şimdilik bir hız seviyesi eklemedim ama oynanabilicek bi hızda olduğunu düşünüyorum.

pencere boyutu değişince oyunda ve görüntüleme de istediğim dışında şeyler oluyor. pencere boyutu değiştirmeyi nasıl engelleyebilirim? ya da değişkenlerimi pencere boyutuyla orantılı olacak şekilde nasıl düzenleyebilirim bunların yanıtına ihtiyacım var.

test için yardımlarınıza ihtiyacım var, kendim eksik buldukça düzeltmeye çalışıyorum ama daha fazla oyuncu fazla hata bulacaktır =) bir de oyunu windows ortamında çalışıcak şekilde nasıl derleyebilirim bilgisi olan var mı?

görsel: http://a1107.hizliresim.com/11/7/29/1351.png

kodlar:
#include <GL/glut.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>

#define esc 27
#define aktif 1
#define pasif 0

void g_ilk_degerler(void);
void yilan_kivrilma(float, float);
void yilan_kontrol(int);
void carpisma_kontrol(void);
void yem_kontrol(void);
void sinir_ve_puan(void);
void goruntuleme(void);
void yilan_cizimi(void);
void tusa_bas(int, int, int);
void tusu_birak(int, int, int);
void boyutlandir(int, int);

char tus_kontrol[256] = {pasif}, _puan[100];
int i, j, sabit, gecici, duzeltme, puan = 0;

struct yem_yapisi{
float x, y;
}yem;

struct yilan_yapisi{
float nokta_x[10000], nokta_y[10000], hiz_y, hiz_x, kivrilma_x[1000], kivrilma_y[1000];
int kivrilma, uzunluk, uzunluk_bas, uzunluk_kuyruk;
}yilan;

int main(int argc, char **argv){

glutInit(&argc, argv);
glutInitWindowSize(800, 800);
glutInitWindowPosition(250, 25);
glutCreateWindow("YILAN");
g_ilk_degerler();
glutDisplayFunc(&goruntuleme);
glutSpecialFunc(&tusa_bas);
glutSpecialUpFunc(&tusu_birak);
glutTimerFunc(0, yilan_kontrol, 0);
glutMainLoop();

return 0;

}

void g_ilk_degerler(){

srand(time(NULL));

do{

yem.x = pow(-1, rand()%2+1) * float(rand()%10)/10;
yem.y = pow(-1, rand()%2+1) * float(rand()%10)/10;

}while(yem.x == 0 && yem.y == 0);

yilan.uzunluk = 10;

}

void goruntuleme(){

glClear(GL_COLOR_BUFFER_BIT);

yilan_cizimi();
carpisma_kontrol();
yem_kontrol();
sinir_ve_puan();

glFlush();

}

void tusa_bas(int tus, int x, int y){
tus_kontrol[tus] = aktif;
}

void tusu_birak(int tus, int x, int y){
tus_kontrol[tus] = pasif;
}

void yilan_kontrol(int deger){

if(tus_kontrol[GLUT_KEY_F1] == aktif)
exit(0);

if(tus_kontrol[GLUT_KEY_UP] == aktif && yilan.hiz_y == 0.0 && tus_kontrol[GLUT_KEY_DOWN] == pasif && tus_kontrol[GLUT_KEY_RIGHT] == pasif && tus_kontrol[GLUT_KEY_LEFT] == pasif)
yilan_kivrilma(0.0, 0.025);

if(tus_kontrol[GLUT_KEY_DOWN] == aktif && yilan.hiz_y == 0.0 && tus_kontrol[GLUT_KEY_UP] == pasif && tus_kontrol[GLUT_KEY_RIGHT] == pasif && tus_kontrol[GLUT_KEY_LEFT] == pasif)
yilan_kivrilma(0.0, -0.025);

if(tus_kontrol[GLUT_KEY_RIGHT] == aktif && yilan.hiz_x == 0.0 && tus_kontrol[GLUT_KEY_DOWN] == pasif && tus_kontrol[GLUT_KEY_UP] == pasif && tus_kontrol[GLUT_KEY_LEFT] == pasif)
yilan_kivrilma(0.025, 0.0);

if(tus_kontrol[GLUT_KEY_LEFT] == aktif && yilan.hiz_x == 0.0 && tus_kontrol[GLUT_KEY_DOWN] == pasif && tus_kontrol[GLUT_KEY_RIGHT] == pasif && tus_kontrol[GLUT_KEY_UP] == pasif)
yilan_kivrilma(-0.025, 0.0);

glutTimerFunc(40, yilan_kontrol, 0);
glutPostRedisplay();

}

void yilan_kivrilma(float hizX, float hizY){

yilan.kivrilma_x[yilan.kivrilma] = yilan.nokta_x[yilan.uzunluk_bas-1];
yilan.kivrilma_y[yilan.kivrilma] = yilan.nokta_y[yilan.uzunluk_bas-1];

yilan.kivrilma++;

yilan.uzunluk_kuyruk = yilan.uzunluk;
yilan.uzunluk_bas = 0;

yilan.hiz_x = hizX;
yilan.hiz_y = hizY;

}

void yilan_cizimi(){

if(yilan.kivrilma == 0){

for(i=0; i<yilan.uzunluk; i++){

yilan.nokta_x[i] += yilan.hiz_x;
yilan.nokta_y[i] += yilan.hiz_y;

}

}

if(yilan.kivrilma > 0){

yilan.uzunluk_bas++;
yilan.uzunluk_kuyruk--;

for(i=0; i<yilan.uzunluk_bas; i++){

yilan.nokta_x[i] = yilan.kivrilma_x[yilan.kivrilma-1] + (i+1)*(yilan.hiz_x);
yilan.nokta_y[i] = yilan.kivrilma_y[yilan.kivrilma-1] + (i+1)*(yilan.hiz_y);

}

if(yilan.uzunluk_bas == yilan.uzunluk)
yilan.kivrilma = 0;

gecici = yilan.uzunluk_bas;

if(yilan.kivrilma > 1){

for(j=yilan.kivrilma-1; j>0; j--){

if(yilan.kivrilma_x[j] == yilan.kivrilma_x[j-1]){

sabit = fabs(yilan.kivrilma_y[j] - yilan.kivrilma_y[j-1])/0.025;

duzeltme = (yilan.kivrilma_y[j] < yilan.kivrilma_y[j-1]) ? 1 : -1;

for(i=0; i<=sabit; i++){

yilan.nokta_x[yilan.uzunluk_bas+i] = yilan.kivrilma_x[j];
yilan.nokta_y[yilan.uzunluk_bas+i] = yilan.kivrilma_y[j] + duzeltme*i*(0.025);

}

yilan.uzunluk_bas += sabit+1;

}


if(yilan.kivrilma_y[j] == yilan.kivrilma_y[j-1]){

sabit = fabs(yilan.kivrilma_x[j] - yilan.kivrilma_x[j-1])/0.025;

duzeltme = (yilan.kivrilma_x[j] < yilan.kivrilma_x[j-1]) ? 1 : -1;

for(i=0; i<=sabit; i++){

yilan.nokta_x[yilan.uzunluk_bas+i] = yilan.kivrilma_x[j] + duzeltme*i*(0.025);
yilan.nokta_y[yilan.uzunluk_bas+i] = yilan.kivrilma_y[j];

}

yilan.uzunluk_bas += sabit+1;

}

}

yilan.uzunluk_bas = gecici;

}

}

/* yilan noktalama başlangic */

glPointSize(8);
glColor3f(0, 1, 0);

glBegin(GL_POINTS);

for(i=0; i<yilan.uzunluk; i++){

if(i == yilan.uzunluk_bas-1)
glColor3f(1, 1, 0);

else
glColor3f(0, 1, 0);

glVertex2f(yilan.nokta_x[i], yilan.nokta_y[i]);

}

glEnd();

/* yilan noktalama bitis */

}

void yem_kontrol(){

if((yilan.nokta_x[yilan.uzunluk_bas-1] + 0.02 >= yem.x && yilan.nokta_x[yilan.uzunluk_bas-1] - 0.02 <= yem.x) && (yilan.nokta_y[yilan.uzunluk_bas-1] + 0.02 >= yem.y && yilan.nokta_y[yilan.uzunluk_bas-1] - 0.02 <= yem.y)){

yilan.uzunluk++;

do{

yem.x = pow(-1, rand()%2+1) * float(rand()%10)/10;
yem.y = pow(-1, rand()%2+1) * float(rand()%10)/10;

}while(yem.x == 0 && yem.y == 0);

puan+=10;

yilan.nokta_x[yilan.uzunluk-1] = yilan.nokta_x[yilan.uzunluk_bas-1];
yilan.nokta_y[yilan.uzunluk-1] = yilan.nokta_y[yilan.uzunluk_bas-1];

}

glPointSize(8);
glColor3f(1, 1, 1);

glBegin(GL_POINTS);

glVertex2f(yem.x, yem.y);

glEnd();

}

void sinir_ve_puan(){

glColor3f(0, 0, 1);

sprintf(_puan, "puan: %d", puan);
glRasterPos2f(-0.1, 0.9);

for (char *p = _puan ; *p; p++)
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *p);

glEnd();

glLineWidth(8);
glColor3f(1, 0, 0);

glBegin(GL_LINES);

glVertex2f(-1.0, 1.0);
glVertex2f(-1.0, -1.0);

glVertex2f(1.0, 1.0);
glVertex2f(1.0, -1.0);

glVertex2f(-1.0, 1.0);
glVertex2f(1.0, 1.0);

glVertex2f(-1.0, -1.0);
glVertex2f(1.0, -1.0);

glEnd();

}

void carpisma_kontrol(){

if(fabs(yilan.nokta_x[yilan.uzunluk_bas-1]) + 0.025 > 1.01 || fabs(yilan.nokta_y[yilan.uzunluk_bas-1]) + 0.025 > 1.01){

sleep(2);

exit(0);

} /* duvar carpısmalari */

for(i=0; i<yilan.uzunluk; i++){

if(i == yilan.uzunluk_bas-1) continue;

if(yilan.nokta_x[yilan.uzunluk_bas-1] + 0.01 >= yilan.nokta_x[i] && yilan.nokta_x[yilan.uzunluk_bas-1] - 0.01 <= yilan.nokta_x[i] && yilan.nokta_y[yilan.uzunluk_bas-1] + 0.01 >= yilan.nokta_y[i] && yilan.nokta_y[yilan.uzunluk_bas-1] - 0.01 <= yilan.nokta_y[i] && yilan.kivrilma > 0){

sleep(2);

exit(0);

}

} /* yilanin kendiyle olan carpismalari */

}
0: her türlü amaç için yazılımı çalıştırma özgürlüğü.
1: yazılımın nasıl çalıştığını inceleme ve kendi gereksinimleri doğrultusunda değiştirme özgürlüğü.
2: yeniden dağıtma ve toplumla paylaşma özgürlüğü.
3: yazılımı geliştirme ve gelişmiş haliyle topluma dağıtma özgürlüğü.



pwl

Emeklerine sağlık dostum. En kısa sürede hız ayarlanmış versionu da bekliyoruz.  ;)

endryz

aslında derleme yapabilenler için;

yilan_kontrol(int) fonksiyonu içindeki şöyle bi komut var: glutTimerFunc(35, yilan_kontrol, 0); burada ki 35 değerini arttırarak yılanı yavaşlatabilir, azaltarak hızlandırabilirsiniz =)

kodların bulunduğu dosyaya yilan.c ismini verip, kaydettiğiniz yere uçbirimle gelip, g++ yilan.c -o yilan -lGL -lGLU -lglut yazarsak derlemiş olur ve oynamaya hazır olursunuz =)
0: her türlü amaç için yazılımı çalıştırma özgürlüğü.
1: yazılımın nasıl çalıştığını inceleme ve kendi gereksinimleri doğrultusunda değiştirme özgürlüğü.
2: yeniden dağıtma ve toplumla paylaşma özgürlüğü.
3: yazılımı geliştirme ve gelişmiş haliyle topluma dağıtma özgürlüğü.



alquirel

Bu GL/glut.h dosyasının olmaması sorununu nasıl aşacağız?

eribol


endryz

yine uçbirime sudo apt-get install freeglut3 freeglut3-dev yazarak o sorunu da aşabilirsiniz sanırım. biraz kolaya kaçıyomuş gibi oldum :) ama önce basit hataları tespit edip sonra ayrıntıları yapmak istiyorum.
0: her türlü amaç için yazılımı çalıştırma özgürlüğü.
1: yazılımın nasıl çalıştığını inceleme ve kendi gereksinimleri doğrultusunda değiştirme özgürlüğü.
2: yeniden dağıtma ve toplumla paylaşma özgürlüğü.
3: yazılımı geliştirme ve gelişmiş haliyle topluma dağıtma özgürlüğü.



alquirel

Evet paket işe yaradı.

Lakin bu sefer de "w" tuşu işe yaramıyor bende :)

endryz

şuan güncellediğim kodlarda düzelttim onu  :)
0: her türlü amaç için yazılımı çalıştırma özgürlüğü.
1: yazılımın nasıl çalıştığını inceleme ve kendi gereksinimleri doğrultusunda değiştirme özgürlüğü.
2: yeniden dağıtma ve toplumla paylaşma özgürlüğü.
3: yazılımı geliştirme ve gelişmiş haliyle topluma dağıtma özgürlüğü.



alquirel

Evet sorun hallolmuş.

Dikkatimi çeken bir diğer nokta : Pencere boyutlaması yaptığımda (çünkü varsayılan olarak açılan pencere ekranıma sığmıyor) yılanın yatay ve dikey ilerlemeleri de pencere boyutuna göre genişliyor/daralıyor. Dolayısıyla yatay ve dikey hızları birbirinin aynısı olmuyor. Oyun penceresinde yılan için ayrı ve sabit boyutlu bir çerçeve oluşturman gerekiyor gibi görünüyor.

endryz

o konuda haklısın, ilk mesajımda da yazmıştım o konuyu. bu durumu düzeltmek için hangi komutlarını kullanıcağımı bilmiyorum. opengl bilgim şuan biraz kısıtlı.
0: her türlü amaç için yazılımı çalıştırma özgürlüğü.
1: yazılımın nasıl çalıştığını inceleme ve kendi gereksinimleri doğrultusunda değiştirme özgürlüğü.
2: yeniden dağıtma ve toplumla paylaşma özgürlüğü.
3: yazılımı geliştirme ve gelişmiş haliyle topluma dağıtma özgürlüğü.



travego0403

void boyutlandir(int w,int h){
    if(h==0)
        h=1;
    float oran=1*w/h;
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glViewport(0,0,w,h);
    gluPerspective(45,1,1,1000);
    glMatrixMode(GL_MODELVIEW);
}


Ana döngü içerisine de

glutReshapeFunc(boyutlandir);

Bu şekilde bir denermisin boyutlandırma için.Çalışma prensibi şöyle pencere tekrar boyutlandırıldığı zaman argüman olarak geçilen fonksiyon çağrılır.
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

endryz

@travego0403, dediğini denedim fakat ekrana hiç görüntü gelmedi  ???
0: her türlü amaç için yazılımı çalıştırma özgürlüğü.
1: yazılımın nasıl çalıştığını inceleme ve kendi gereksinimleri doğrultusunda değiştirme özgürlüğü.
2: yeniden dağıtma ve toplumla paylaşma özgürlüğü.
3: yazılımı geliştirme ve gelişmiş haliyle topluma dağıtma özgürlüğü.



rutku

Hayallerini kodla ...

uKiriş
Mezgeldek

travego0403

Aşağıdaki şekilde olursa çalışıyor ama ben herhangi bir değişiklik göremedim, benim kodları ekleyince. :) Okuduğum kaynaklarda hep bu şekilde kullanılmıştı ama hiç denememiştim.

Oyun gayet güzel, elinize sağlık.Böyle oyun yapımıyla uğraşanları görmek sevindirici.Çünkü oyun programlamak oldukça zevkli bir iş. :) Her zaman söylediğim gibi "Her ne kadar kötü de olsa kendi yazdığın oyunu oynamak daha zevklidir".

Oyunda bulduğum buglar ise: (Sadece benden kaynaklı sorunlarda olabilir.)
*Sınır şartlarında bir sorun var sanırsam, yılan ekran dışına çıktığı zaman U yapıp geri dönersen oyun devam ediyor, bu her zaman olmuyor.
*Yemler doğarken yılanın olduğu yerde doğuyor(rastgele olmasına karşın bazen denk geliyor) buda bence hoş değil önce bir kontrol edilebilir eğer uygunsa yem oluşturulabilir.

#include <GL/glut.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>

#define esc 27
#define aktif 1
#define pasif 0

void g_ilk_degerler(void);
void yilan_kivrilma(float, float);
void yilan_kontrol(int);
void carpisma_kontrol(void);
void yem_kontrol(void);
void sinir_ve_puan(void);
void goruntuleme(void);
void yilan_cizimi(void);
void tusa_bas(unsigned char, int, int);
void tusu_birak(unsigned char, int, int);
void boyutlandir(int,int);

char tus_kontrol[256] = {pasif}, _puan[100];
int i, j, sabit, gecici, duzeltme, puan = 0;

struct yem_yapisi{
float x, y;
}yem;

struct yilan_yapisi{
float nokta_x[10000], nokta_y[10000], hiz_y, hiz_x, kivrilma_x[1000], kivrilma_y[1000];
int kivrilma, uzunluk, uzunluk_bas, uzunluk_kuyruk;
}yilan;

int main(int argc, char **argv){

glutInit(&argc, argv);
glutInitWindowSize(800, 800);
glutReshapeFunc(boyutlandir);
glutInitWindowPosition(250, 25);
glutCreateWindow("YILAN");
g_ilk_degerler();
glutDisplayFunc(&goruntuleme);
glutKeyboardFunc(&tusa_bas);
glutKeyboardUpFunc(&tusu_birak);
glutTimerFunc(0, yilan_kontrol, 0);
glutMainLoop();

return 0;

}

void g_ilk_degerler(){

srand(time(NULL));

yem.x = pow(-1, rand()%2+1) * float(rand()%10)/10;
yem.y = pow(-1, rand()%2+1) * float(rand()%10)/10;

yilan.uzunluk = 10;

}

void goruntuleme(){

glClear(GL_COLOR_BUFFER_BIT);

yem_kontrol();
yilan_cizimi();
carpisma_kontrol();
sinir_ve_puan();

glFlush();

}

void tusa_bas(unsigned char tus, int x, int y){
tus_kontrol[tus] = aktif;
}

void tusu_birak(unsigned char tus, int x, int y){
tus_kontrol[tus] = pasif;
}

void yilan_kontrol(int deger){

if(tus_kontrol[esc] == aktif)
exit(0);

if(tus_kontrol['w'] == aktif && yilan.hiz_y == 0.0 && tus_kontrol['s'] == pasif && tus_kontrol['d'] == pasif && tus_kontrol['a'] == pasif)
yilan_kivrilma(0.0, 0.025);

if(tus_kontrol['s'] == aktif && yilan.hiz_y == 0.0 && tus_kontrol['w'] == pasif && tus_kontrol['d'] == pasif && tus_kontrol['a'] == pasif)
yilan_kivrilma(0.0, -0.025);

if(tus_kontrol['d'] == aktif && yilan.hiz_x == 0.0 && tus_kontrol['s'] == pasif && tus_kontrol['w'] == pasif && tus_kontrol['a'] == pasif)
yilan_kivrilma(0.025, 0.0);


if(tus_kontrol['a'] == aktif && yilan.hiz_x == 0.0 && tus_kontrol['s'] == pasif && tus_kontrol['d'] == pasif && tus_kontrol['w'] == pasif)
yilan_kivrilma(-0.025, 0.0);

glutTimerFunc(35, yilan_kontrol, 0);
glutPostRedisplay();

}

void yilan_kivrilma(float hizX, float hizY){

yilan.kivrilma_x[yilan.kivrilma] = yilan.nokta_x[yilan.uzunluk_bas-1];
yilan.kivrilma_y[yilan.kivrilma] = yilan.nokta_y[yilan.uzunluk_bas-1];

yilan.kivrilma++;

yilan.uzunluk_kuyruk = yilan.uzunluk;
yilan.uzunluk_bas = 0;

yilan.hiz_x = hizX;
yilan.hiz_y = hizY;

}

void yilan_cizimi(){

if(yilan.kivrilma == 0){

for(i=0; i<yilan.uzunluk; i++){

yilan.nokta_x[i] += yilan.hiz_x;
yilan.nokta_y[i] += yilan.hiz_y;

}

}

if(yilan.kivrilma > 0){

yilan.uzunluk_bas++;
yilan.uzunluk_kuyruk--;

for(i=0; i<yilan.uzunluk_bas; i++){

yilan.nokta_x[i] = yilan.kivrilma_x[yilan.kivrilma-1] + (i+1)*(yilan.hiz_x);
yilan.nokta_y[i] = yilan.kivrilma_y[yilan.kivrilma-1] + (i+1)*(yilan.hiz_y);

}

if(yilan.uzunluk_bas == yilan.uzunluk)
yilan.kivrilma = 0;

gecici = yilan.uzunluk_bas;

if(yilan.kivrilma > 1){

for(j=yilan.kivrilma-1; j>0; j--){

if(yilan.kivrilma_x[j] == yilan.kivrilma_x[j-1]){

sabit = fabs(yilan.kivrilma_y[j] - yilan.kivrilma_y[j-1])/0.025;

duzeltme = (yilan.kivrilma_y[j] < yilan.kivrilma_y[j-1]) ? 1 : -1;

for(i=0; i<=sabit; i++){

yilan.nokta_x[yilan.uzunluk_bas+i] = yilan.kivrilma_x[j];
yilan.nokta_y[yilan.uzunluk_bas+i] = yilan.kivrilma_y[j] + duzeltme*i*(0.025);

}

yilan.uzunluk_bas += sabit+1;

}


if(yilan.kivrilma_y[j] == yilan.kivrilma_y[j-1]){

sabit = fabs(yilan.kivrilma_x[j] - yilan.kivrilma_x[j-1])/0.025;

duzeltme = (yilan.kivrilma_x[j] < yilan.kivrilma_x[j-1]) ? 1 : -1;

for(i=0; i<=sabit; i++){

yilan.nokta_x[yilan.uzunluk_bas+i] = yilan.kivrilma_x[j] + duzeltme*i*(0.025);
yilan.nokta_y[yilan.uzunluk_bas+i] = yilan.kivrilma_y[j];

}

yilan.uzunluk_bas += sabit+1;

}

}

yilan.uzunluk_bas = gecici;

}

}

/* yilan noktalama başlangic */

glPointSize(8);
glColor3f(0, 1, 0);

glBegin(GL_POINTS);

for(i=0; i<yilan.uzunluk; i++){

if(i == yilan.uzunluk_bas-1)
glColor3f(1, 1, 0);

else
glColor3f(0, 1, 0);

glVertex2f(yilan.nokta_x[i], yilan.nokta_y[i]);

}

glEnd();

/* yilan noktalama bitis */

}

void yem_kontrol(){

glPointSize(8);
glColor3f(1, 1, 1);

glBegin(GL_POINTS);

glVertex2f(yem.x, yem.y);

glEnd();

if(yilan.nokta_x[yilan.uzunluk_bas-1] + 0.005 >= yem.x && yilan.nokta_x[yilan.uzunluk_bas-1] - 0.005 <= yem.x && yilan.nokta_y[yilan.uzunluk_bas-1] + 0.005 >= yem.y && yilan.nokta_y[yilan.uzunluk_bas-1] - 0.005 <= yem.y){

yilan.uzunluk++;

yem.x = pow(-1, rand()%2+1) * float(rand()%10)/10;
yem.y = pow(-1, rand()%2+1) * float(rand()%10)/10;

puan+=10;

yilan.nokta_x[yilan.uzunluk-1] = yilan.nokta_x[yilan.uzunluk_bas-1];
yilan.nokta_y[yilan.uzunluk-1] = yilan.nokta_y[yilan.uzunluk_bas-1];

}

}

void sinir_ve_puan(){

glColor3f(0, 0, 1);

sprintf(_puan, "puan: %d", puan);
glRasterPos2f(-0.1, 0.9);

for (char *p = _puan ; *p; p++)
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *p);

glEnd();

glLineWidth(8);
glColor3f(1, 0, 0);

glBegin(GL_LINES);

glVertex2f(-1.0, 1.0);
glVertex2f(-1.0, -1.0);

glVertex2f(1.0, 1.0);
glVertex2f(1.0, -1.0);

glVertex2f(-1.0, 1.0);
glVertex2f(1.0, 1.0);

glVertex2f(-1.0, -1.0);
glVertex2f(1.0, -1.0);

glEnd();

}

void carpisma_kontrol(){

if(fabs(yilan.nokta_x[yilan.uzunluk_bas-1]) >= 1.0 || fabs(yilan.nokta_y[yilan.uzunluk_bas-1]) >= 1.0){

sleep(2);

exit(0);

} /* duvar carpısmalari */

for(i=0; i<yilan.uzunluk; i++){

if(i == yilan.uzunluk_bas-1) continue;

if(yilan.nokta_x[yilan.uzunluk_bas-1] == yilan.nokta_x[i] && yilan.nokta_y[yilan.uzunluk_bas-1] == yilan.nokta_y[i] && yilan.kivrilma > 0){

sleep(2);

exit(0);

}

} /* yilanin kendiyle olan carpismalari */

}

void boyutlandir(int w,int h){
    if(h==0)
        h=1;
    float oran=1*w/h;
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glViewport(0,0,w,h);
    gluPerspective(45,1,1,1000);
    glMatrixMode(GL_MODELVIEW);
}
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

endryz

@travego0403

- duvar sınırları konusunda dediğin bug arada benimde başıma geliyor ama sanki özel bir durumda oluşuyormuş gibi duruyor, onu belirmelemeye çalışıyorum şuan.
- yem konusu ise o şekilde hiç aklıma gelmemişti, güzel bir bakış açısı, düzelticem =)
0: her türlü amaç için yazılımı çalıştırma özgürlüğü.
1: yazılımın nasıl çalıştığını inceleme ve kendi gereksinimleri doğrultusunda değiştirme özgürlüğü.
2: yeniden dağıtma ve toplumla paylaşma özgürlüğü.
3: yazılımı geliştirme ve gelişmiş haliyle topluma dağıtma özgürlüğü.



heartsmagic

Alıntı yapılan: travego0403 - 30 Temmuz 2011 - 11:05:03
Oyun gayet güzel, elinize sağlık.Böyle oyun yapımıyla uğraşanları görmek sevindirici...

Benim içinse bizim forumda görmek daha da sevindirici :)
Hani forum ara ara başka yönlere doğru genişlediğinde nedense pek hoşnut olmuyorum fakat programlama konusunda bu şekilde uğraşıldığın görmek sevindiriyor beni.
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

sem

Ben de alanı daraltayım C tarafında böyle şeyleri görmek beni daha da sevindiriyor =)

eline sağlık...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

travego0403

Bende alt alan olarak oyun programlamak (C/C++ - OpenGL ile )  diyeyim. :D
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

eribol

Ben de hiçbir zaman yapamayacağım için kıskançlık krizlerine giriyorum efendim. Yapmayın böyle şeyler :D

sem

"Hiçbir zaman" deyince zaman sıkıntısı geliyor insanın aklına. Ama ondan farklı bir durumsa %99 yanılma payı veriyorum. Yapılabilir. Eğer farklı durum değilse "Hayat..." dedirtiyor insana =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

mrv

kodu eklediğimde   
şu satırda ------->            for (char *p = _puan ; *p; p++)
[Error] 'for' loop initial declarations are only allowed in C99 mode böyle bir hata alıyorum neden acaba