Anka MMOFPS Oyunu

Burada tam olarak neyi sordunuz?

x kişisinin konumunu server üzerinden nasıl y kişisine gözükeceğini.Yani tam zamanlı görüntü.

Konumu internet üzerinden aktarılıyor. Gerçek zamanlı değil, gecikme var. Ayrıca bunları @AnkaMMOFPS’a sormanız anlamsız, bunun gibi işlemler kütüphaneler tarafından kullanımı çok kolay hale getiriliyor. Bunlar ile teker teker uğraşılmaz genelde.

Mesela Unity’nin eski multiplayer sistemi olan UNet’te bir component’ten ibaretti, konumunun bütün oyuncularda aynı olmasını istediğiniz nesnelere iki butona tıklayıp bu component’i ekliyordunuz.

1 Beğeni

Ayrı bir konu açılabilir.

İlk defa bir oyun motoru kullanacağım için daha küçük bir proje ile başlayıp,ondan sonra bu projeye geçeceğim.Ayrıca sunucu fiyatları da uçmuş :confused: .Araç simülasyonu yapmayı planlıyorum.Bu proje ile az da olsa gelir elde edip diğer oyuna en azından bilgi birikimi ile başlayacağım.

1 Beğeni

Bu projenin başarılı olması için çalışması gereken kişi sayısı en az 50 kişi. Hepsi de en az 10 sene tecrübeli olacak. Çalışacak her adama bir de maaş vermeniz gerek. Daha sonra sunucu masrafları var. Sonra reklam ve pazarlama var. Bana göre en az 200.000 TL bir bütçeniz olması gerekiyor. Yani para gerek para :grinning: .

Başaralı olmak için 50 kişiye değil,isteyen 5 kişiye ihtiyacımız var.Hepsi 10 değil,0 yıl tecrübeye,ancak isteğe sahip olsa da olur.Herkese maaş değil,hisse verebiliriz.Masraf yok,herkes gönüllü ve evden çalışacak.Reklama gerek yok,burası var.200.000 değil,bilgisayarlara ve isteklere ihtiyacımız var.Yani paraya gerek yok.

Bu bizim ülkemizin…

Ama sadece 1 kişi benimle olmayı seçti ve,olmadı…

2 Beğeni

Merhaba 8 ay önceki projem,

Seni işe yaramasa da bir hale sokabildim;

image

hmm…güzel bir üçgen
shader kodunu atarmısın?

bence hileleri banlamak yerine direk hilecilerin değiştirdiği clientteki verileri servere taşıyın tabi server kötüyse ileride geleeck olan para ile serveri güçlendirirsiniz. mesela zıplama uzunluğu 5 olsun ama bu clientte olsun. hileciler onu 40 yapıp oyuncuların üzerinden atlayabilir ama bu veri serverde olursa onu değiştiremezler. bu postu yazdım çünkü hileler banlamakla bitmezler yeni hesap açarlar. onları kökten engellemek gerekir.

Maalesef, ücretsiz bir oyunda hesap açışını engellemek mümkün değil. Sadece telefon numarası ile doğrulanan bir hesap sistemi açsam telefonu olmayan binlerce kişi var. Gerçi, oyun yok ortada :d

Riot Games’in şöyle bir açıklaması var, ve bu durumu özetliyor :

Sağol

#include <windows.h>
#include <gl/gl.h>


/**************************
 * Function Declarations
 *
 **************************/

LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC);
void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC);


/**************************
 * WinMain
 *
 **************************/

int WINAPI WinMain (HINSTANCE hInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine,
                    int iCmdShow)
{
    WNDCLASS wc;
    HWND hWnd;
    HDC hDC;
    HGLRC hRC;        
    MSG msg;
    BOOL bQuit = FALSE;
    float theta = 0.0f;

    /* register window class */
    wc.style = CS_OWNDC;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor (NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);
    wc.lpszMenuName = NULL;
    wc.lpszClassName = "GLSample";
    RegisterClass (&wc);

    /* create main window */
    hWnd = CreateWindow (
      "GLSample", "OpenGL Sample", 
      WS_CAPTION | WS_POPUPWINDOW | WS_VISIBLE,
      0, 0, 256, 256,
      NULL, NULL, hInstance, NULL);

    /* enable OpenGL for the window */
    EnableOpenGL (hWnd, &hDC, &hRC);

    /* program main loop */
    while (!bQuit)
    {
        /* check for messages */
        if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
        {
            /* handle or dispatch messages */
            if (msg.message == WM_QUIT)
            {
                bQuit = TRUE;
            }
            else
            {
                TranslateMessage (&msg);
                DispatchMessage (&msg);
            }
        }
        else
        {
            /* OpenGL animation code goes here */

            glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
            glClear (GL_COLOR_BUFFER_BIT);

            glPushMatrix ();
            glRotatef (theta, 0.0f, 0.0f, 1.0f);
            glBegin (GL_TRIANGLES);
            glColor3f (1.0f, 0.0f, 0.0f);   glVertex2f (0.0f, 1.0f);
            glColor3f (0.0f, 1.0f, 0.0f);   glVertex2f (0.87f, -0.5f);
            glColor3f (0.0f, 0.0f, 1.0f);   glVertex2f (-0.87f, -0.5f);
            glEnd ();
            glPopMatrix ();

            SwapBuffers (hDC);

            theta += 1.0f;
            Sleep (1);
        }
    }

    /* shutdown OpenGL */
    DisableOpenGL (hWnd, hDC, hRC);

    /* destroy the window explicitly */
    DestroyWindow (hWnd);

    return msg.wParam;
}


/********************
 * Window Procedure
 *
 ********************/

LRESULT CALLBACK WndProc (HWND hWnd, UINT message,
                          WPARAM wParam, LPARAM lParam)
{

    switch (message)
    {
    case WM_CREATE:
        return 0;
    case WM_CLOSE:
        PostQuitMessage (0);
        return 0;

    case WM_DESTROY:
        return 0;

    case WM_KEYDOWN:
        switch (wParam)
        {
        case VK_ESCAPE:
            PostQuitMessage(0);
            return 0;
        }
        return 0;

    default:
        return DefWindowProc (hWnd, message, wParam, lParam);
    }
}


/*******************
 * Enable OpenGL
 *
 *******************/

void EnableOpenGL (HWND hWnd, HDC *hDC, HGLRC *hRC)
{
    PIXELFORMATDESCRIPTOR pfd;
    int iFormat;

    /* get the device context (DC) */
    *hDC = GetDC (hWnd);

    /* set the pixel format for the DC */
    ZeroMemory (&pfd, sizeof (pfd));
    pfd.nSize = sizeof (pfd);
    pfd.nVersion = 1;
    pfd.dwFlags = PFD_DRAW_TO_WINDOW | 
      PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
    pfd.iPixelType = PFD_TYPE_RGBA;
    pfd.cColorBits = 24;
    pfd.cDepthBits = 16;
    pfd.iLayerType = PFD_MAIN_PLANE;
    iFormat = ChoosePixelFormat (*hDC, &pfd);
    SetPixelFormat (*hDC, iFormat, &pfd);

    /* create and enable the render context (RC) */
    *hRC = wglCreateContext( *hDC );
    wglMakeCurrent( *hDC, *hRC );

}


/******************
 * Disable OpenGL
 *
 ******************/

void DisableOpenGL (HWND hWnd, HDC hDC, HGLRC hRC)
{
    wglMakeCurrent (NULL, NULL);
    wglDeleteContext (hRC);
    ReleaseDC (hWnd, hDC);
}

Hazır kod gibi bir şey, WinAPI kullandığımı belirteyim.

ah, neyse genede güzel bir üçgen :d

1 Beğeni

WinAPI yerine GLFW kullanman daha iyi olur sanki, çünkü GLFW pencereler ile alakalı şeyleri bizim yerimize hallediyor ve kendi işimize odaklanmamizi sağlıyor
Linking te de
Linuxte -lGL
Yazıyorsun (windekini bilmiyorum)

1 Beğeni