Guest User

BattleGirlBingoMaximizerBeta.cpp

a guest
Aug 25th, 2016
450
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.88 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4.  
  5. #define Du 16
  6. #define Dd 10
  7.  
  8. /*
  9. Developer:Adam36
  10. Authorized by CC BY-SA 3.0
  11. */
  12.  
  13. /*
  14. 0-Sadone    1-Hinata    2-Sakura
  15. 3-Kaede     4-Michael
  16. 5-Urara     6-Kokomi
  17. 7-Miki      8-Haruka    9-Subaru
  18. A-Kurumi    B-Nozomi    C-Yuri
  19. D-Anko      E-Asuha     F-Renge
  20. */
  21.  
  22. string name[]={ "莎朵霓","日  向","  櫻  ","  楓  ",
  23.                 "姆  咪","烏拉拉","心  美","美  紀",
  24.                 "遙  香","  昴  ","胡  桃","  望  ",
  25.                 "百  合","杏  子","明日葉","蓮  華"};
  26.  
  27. class Pool{
  28.     public:
  29.         int va,vb,a[10],i;
  30.         Pool(){
  31.             for(i=0;i<10;i++){
  32.                 a[i]=0;
  33.             }
  34.             va=0;vb=0;
  35.         }
  36.         void copy(Pool *p){
  37.             for(i=0;i<10;i++){
  38.                 this->a[i]=p->a[i];
  39.             }
  40.             this->va=p->va;
  41.             this->vb=p->vb;
  42.         }
  43.         void set(int t[]){
  44.             for(i=0;i<10;i++){
  45.                 a[i]=t[i];
  46.             }
  47.         }
  48.         bool q(int x){
  49.             if(x<0) return false;
  50.             for(i=0;i<10;i++){
  51.                 if(x==a[i]) return true;
  52.             }
  53.             return false;
  54.         }
  55.         void setValue(int x,int y){
  56.             va=x;
  57.             vb=y;
  58.         }
  59. };
  60.  
  61. class CRing{
  62.     public:
  63.         int a[Dd],hid[Dd/2],i,o[16];
  64.         bool k;
  65.         CRing(){
  66.             for(i=0;i<Dd/2;i++){
  67.                 hid[i]=i*2;
  68.             }
  69.             genA();
  70.             k=true;
  71.         }
  72.         void n(int x){
  73.             //cout<<"Stage "<<x<<" starts : "<< a[x]<<endl;
  74.             hid[x]++;
  75.             if(hid[0]==Du-Dd+1){
  76.                 k=false;
  77.                 return;
  78.             }
  79.             if(hid[x]==x*2+Du-Dd+1){
  80.                 n(x-1);
  81.                 hid[x]=hid[x-1]+2;
  82.             }
  83.             genA();
  84.             //cout<<"Stage "<<x<<" finish : "<< a[x]<<endl;
  85.         }
  86.         void next(){
  87.             n(Dd/2-1);
  88.         }
  89.         void genA(){
  90.             for(i=0;i<Dd;i++){
  91.                 if(i%2==0){
  92.                     a[i]=o[hid[i/2]];
  93.                 }else{
  94.                     a[i]=o[hid[i/2]+1];
  95.                 }
  96.             }
  97.         }  
  98. };
  99.  
  100. class Board{
  101.     public:
  102.         int a[5][5],i,j;
  103.         bool b[5][5];
  104.         Board(){
  105.             for(i=0;i<5;i++)
  106.                 for(j=0;j<5;j++){
  107.                     a[i][j]=-1;
  108.             }
  109.             init();
  110.         }
  111.         void init(){
  112.             for(i=0;i<5;i++)
  113.                 for(j=0;j<5;j++){
  114.                     b[i][j]=false;
  115.             }
  116.             a[2][2]=-1;
  117.             b[2][2]=true;
  118.         }
  119.         void calc(Pool *p){
  120.             init();
  121.             int x,y,tmp;
  122.             x=0;y=0;
  123.             for(i=0;i<5;i++)
  124.                 for(j=0;j<5;j++){
  125.                     if(p->q(a[i][j]))
  126.                         b[i][j]=true;
  127.             }
  128.             for(i=0;i<5;i++){
  129.                 tmp=0;
  130.                 for(j=0;j<5;j++){
  131.                     if(b[i][j])
  132.                         tmp++;
  133.                 }
  134.                 if(tmp==5) x++;
  135.                 if(tmp==4) y++;
  136.                 tmp=0;
  137.                 for(j=0;j<5;j++){
  138.                     if(b[j][i])
  139.                         tmp++;
  140.                 }
  141.                 if(tmp==5) x++;
  142.                 if(tmp==4) y++;
  143.             }
  144.                 tmp=0;
  145.                 j=0;
  146.                 for(i=0;i<5;i++){
  147.                     if(b[i][i])
  148.                         tmp++;
  149.                     if(b[i][4-i])
  150.                         j++;
  151.                 }
  152.                 if(tmp==5) x++;
  153.                 if(tmp==4) y++;
  154.                 tmp=j;
  155.                 if(tmp==5) x++;
  156.                 if(tmp==4) y++;
  157.            
  158.             p->setValue(x,y);
  159.         }
  160.        
  161. };
  162.  
  163. void paint(Board *b,int x,int y){
  164.     int i,j;
  165.     system("cls");
  166.     for(i=0;i<16;i++){
  167.         if(i%4==0)cout<<endl;
  168.         cout<<name[i]<<" - ";
  169.         printf("%2d\t",i);
  170.         if(i%4==3)cout<<endl;
  171.     }
  172.     cout<<endl;
  173.     cout<<"  12345\n\n";
  174.     for(i=0;i<5;i++){
  175.         cout<<(i+1)<<" ";
  176.         for(j=0;j<5;j++){
  177.             if(i==x&&j==y){
  178.                 cout<<"*";
  179.             }
  180.             else if(b->a[i][j]>=10){
  181.                 cout<<(char)(b->a[i][j]+55);
  182.             }else if(b->a[i][j]>=0){
  183.                 cout<<b->a[i][j];
  184.             }else if(b->a[i][j]==-1){
  185.                 cout<<"_";
  186.             }else cout<<" ";
  187.         }
  188.         cout<<endl;
  189.     }
  190.     cout<<endl;
  191.     if(x!=6)cout<<"請輸入上方代號 : ";
  192.     else cout<<"請輸入跑步順序 以空格相鄰 : ";
  193. }
  194.  
  195. int main(){
  196.     int a,i,j;
  197.     CRing *c;
  198.     Pool *p,*max;
  199.     Board *b;
  200.     b=new Board();
  201.     p=new Pool();
  202.     max=new Pool();
  203.     c=new CRing();
  204.    
  205.     for(i=0;i<5;i++)
  206.         for(j=0;j<5;j++){
  207.             if(i==2&&j==2)continue;
  208.             paint(b,i,j);
  209.             cin>>b->a[i][j];
  210.         }  
  211.     paint(b,6,6);
  212.     for(i=0;i<Du;i++)
  213.         cin>>c->o[i];
  214.    
  215.     while(c->k){
  216.         p->set(c->a);
  217.         b->calc(p);
  218.         if(p->va > max->va || (p->va == max->va && p->vb > max->vb)){
  219.             max->copy(p);
  220.             /*for(i=0;i<10;i++){
  221.                 cout << max->a[i]<<" ";
  222.             }
  223.             cout<<"Max: "<<max->va<<","<<max->vb<<endl;*/
  224.         }
  225.         c->next();
  226.     }
  227.    
  228.     for(i=0;i<10;i++){
  229.         cout << name[max->a[i]]<<"\t";
  230.         if(i%5==4)cout<<endl;
  231.     }
  232.     cout<<"\nMax: "<<max->va<<","<<max->vb<<endl;
  233.     return 0;
  234. }
Advertisement
Add Comment
Please, Sign In to add comment