DOTA Eşleşme Sistemi
Defence of the Ancients (DotA), gerçek zamanlı strateji oyunu olan Warcraft III: Reign of Chaos ve Warcraft III: The Frozen Throne oyunları için üretilmiş bir moddur. Haritadaki senaryonun amacı; haritanın her köşesinde yer alan yapıları korumak ve düşman yapıları yok etmektir. Oyuncular güçlü ve yetenekli birimler olan 'Hero'(Kahraman)ları kullanırlar, oyun içerisinde bu kahramanlar birlikte çalışırlar ve AI(yapay zeka) kontrollü ittifak savaşçıları olarak adlandırılan 'creep'lerle oyun oynanır. Oyuncular oyunda kahramanları yönettiği gibi, düşmanlarını öldürerek kahramanlarına altın kazandırır ve ekipman alırlar.
DotA, online bir strateji oyunudur ve Steam, GArena gibi platformlarda 5'e 5 'lik takımlarla oynanabilir. Oyun platformundaki seviyenizle ilişkili olarak bu platformlar sizi dengeli bir şekilde takımlara dağıtır. Fakat, eğer kendi arkadaş grubunuz varsa ve ortak ağ üzerinden oynuyorsanız, en dengeli takımın nasıl oluşturalacağı konusunda sıkıntı çekebilirsiniz. Eğer arkadaşlarınızı 10 üzerinden puanlayabiliyorsanız, aşağıdaki eşleşme algoritmasıyla takımlara dağılabilirsiniz.
DotA, online bir strateji oyunudur ve Steam, GArena gibi platformlarda 5'e 5 'lik takımlarla oynanabilir. Oyun platformundaki seviyenizle ilişkili olarak bu platformlar sizi dengeli bir şekilde takımlara dağıtır. Fakat, eğer kendi arkadaş grubunuz varsa ve ortak ağ üzerinden oynuyorsanız, en dengeli takımın nasıl oluşturalacağı konusunda sıkıntı çekebilirsiniz. Eğer arkadaşlarınızı 10 üzerinden puanlayabiliyorsanız, aşağıdaki eşleşme algoritmasıyla takımlara dağılabilirsiniz.
Yazılım input dosyası ve ekran çıktısı :
Kaynak Kodu :
//C++ Programming Langue
//zafercavdar
#include <cstdlib>
#include <cstdio>
#include <iostream>
using namespace std;
FILE *inputf = fopen ("memberlist.in","r");
int grup1[10000];
char memberlist[10000][100];
int memberpoint[10000];
int total;
void callprint()
{
int t;
printf("DOTA 1.Grup : \n\n\n");
for (int b=0; b< total/2; b++)
for (int p=0 ; p < total; p++)
if (grup1[b]== p)
cout << memberlist[p] << "\n" ;
//printf("%s",memberlist[p]);
printf("\n\nDOTA 2.Grup : \n\n\n");
for (int m=0; m< total; m++)
{
t=0;
for (int n=0; n< total/2; n++)
{
if (grup1[n]== m)
{
t=1;
break;
}
}
if (t==0)
cout<< memberlist[m] << "\n";
//printf("%s",memberlist[m]);
}
}
void scanread()
{
fscanf(inputf,"%d",&total);
for (int j=0 ; j< total; j++)
{
fscanf(inputf,"%s",&memberlist[j]);
fscanf(inputf,"%s",&memberpoint[j]);
}
for (int x= 0; x< total/2 ; x++)
grup1[x]=-1;
}
void grouping()
{
int point_total=0,idealpoint;
for (int i=0 ; i< total ; i++)
point_total+=memberpoint[i];
idealpoint= point_total/2;
int mincost=9999999,tot,dif;
for (int a= 0; a< total; a++)
for (int b= 0; b< total; b++)
for (int c=0; c< total; c++)
for (int d=0; d< total ; d++)
for (int e=0 ; e<total ; e++)
if (a!=b && a!=c && a!=d && a!=e && b!=c && b!=d && b!=e && c!=d && c!=e && d!=e)
{
tot= memberpoint[a]+memberpoint[b]+memberpoint[c]+memberpoint[d]+memberpoint[e];
dif= idealpoint-tot;
if (dif<0)
dif=dif*(-1);
if (dif<mincost)
mincost=dif;
}
//printf("Mincost : %d",mincost);
for (int a= 0; a< total; a++)
for (int b= 0; b< total; b++)
for (int c=0; c< total; c++)
for (int d=0; d< total ; d++)
for (int e=0 ; e<total ; e++)
if (a!=b && a!=c && a!=d && a!=e && b!=c && b!=d && b!=e && c!=d && c!=e && d!=e)
{
if (memberpoint[a]+memberpoint[b]+memberpoint[c]+memberpoint[d]+memberpoint[e]== idealpoint+mincost ||
memberpoint[a]+memberpoint[b]+memberpoint[c]+memberpoint[d]+memberpoint[e]== idealpoint-mincost)
{
grup1[0]=a;
grup1[1]=b;
grup1[2]=c;
grup1[3]=d;
grup1[4]=e;
}
}
}
int main()
{
printf("DOTA Team Matching System\n");
scanread();
grouping();
callprint();
fclose(inputf);
return 0;
}
//zafercavdar
#include <cstdlib>
#include <cstdio>
#include <iostream>
using namespace std;
FILE *inputf = fopen ("memberlist.in","r");
int grup1[10000];
char memberlist[10000][100];
int memberpoint[10000];
int total;
void callprint()
{
int t;
printf("DOTA 1.Grup : \n\n\n");
for (int b=0; b< total/2; b++)
for (int p=0 ; p < total; p++)
if (grup1[b]== p)
cout << memberlist[p] << "\n" ;
//printf("%s",memberlist[p]);
printf("\n\nDOTA 2.Grup : \n\n\n");
for (int m=0; m< total; m++)
{
t=0;
for (int n=0; n< total/2; n++)
{
if (grup1[n]== m)
{
t=1;
break;
}
}
if (t==0)
cout<< memberlist[m] << "\n";
//printf("%s",memberlist[m]);
}
}
void scanread()
{
fscanf(inputf,"%d",&total);
for (int j=0 ; j< total; j++)
{
fscanf(inputf,"%s",&memberlist[j]);
fscanf(inputf,"%s",&memberpoint[j]);
}
for (int x= 0; x< total/2 ; x++)
grup1[x]=-1;
}
void grouping()
{
int point_total=0,idealpoint;
for (int i=0 ; i< total ; i++)
point_total+=memberpoint[i];
idealpoint= point_total/2;
int mincost=9999999,tot,dif;
for (int a= 0; a< total; a++)
for (int b= 0; b< total; b++)
for (int c=0; c< total; c++)
for (int d=0; d< total ; d++)
for (int e=0 ; e<total ; e++)
if (a!=b && a!=c && a!=d && a!=e && b!=c && b!=d && b!=e && c!=d && c!=e && d!=e)
{
tot= memberpoint[a]+memberpoint[b]+memberpoint[c]+memberpoint[d]+memberpoint[e];
dif= idealpoint-tot;
if (dif<0)
dif=dif*(-1);
if (dif<mincost)
mincost=dif;
}
//printf("Mincost : %d",mincost);
for (int a= 0; a< total; a++)
for (int b= 0; b< total; b++)
for (int c=0; c< total; c++)
for (int d=0; d< total ; d++)
for (int e=0 ; e<total ; e++)
if (a!=b && a!=c && a!=d && a!=e && b!=c && b!=d && b!=e && c!=d && c!=e && d!=e)
{
if (memberpoint[a]+memberpoint[b]+memberpoint[c]+memberpoint[d]+memberpoint[e]== idealpoint+mincost ||
memberpoint[a]+memberpoint[b]+memberpoint[c]+memberpoint[d]+memberpoint[e]== idealpoint-mincost)
{
grup1[0]=a;
grup1[1]=b;
grup1[2]=c;
grup1[3]=d;
grup1[4]=e;
}
}
}
int main()
{
printf("DOTA Team Matching System\n");
scanread();
grouping();
callprint();
fclose(inputf);
return 0;
}