• 个人简介

    一个游戏代码,虽然不是自制的,玩到一半发现......

    cpp
    #include <cstdio>
    #include <ctime>           //rand()%(x) 0~x-1 int
    #include <windows.h>       //停顿:Sleep();
    #include <cstdlib>         //清屏:system("cls");
    #include <conio.h>         //getch(); char
    #include <iostream>
    #include <cstring>         //未知  :□; 打中  :◎;  未打中:○ 船:★;
    using namespace std;
    int rest[3][5],r1,r2;      //rest[1]:玩家的海域; rest[2]:电脑的海域  r1:玩家还剩船数; r2:电脑还剩船数
    int b1[12][12],b2[12][12];                            //0:空海; 1:船只; 2:打中; 3:边界 4:未打中 5:沉船
    int c1[12][12],c2[12][12];                            //c1:玩家海域的颜色  c2:电脑海域颜色
    int fx[8][2]={{0,1},{1,0},{0,-1},{-1,0},{1,1},{-1,-1},{1,-1},{-1,1}};
    int now[2][2];              //now[左/右][x/y]  光标
    string a1[12][12],a2[12][12];
    int fd [500][2],head=0,tail=0;
    const long long wdmm=956454236985412563;
    long long cjzt=0,wdm;
    
    void color(int a)//颜色函数
    {
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
    }
    void gotoxy(int x,int y)//位置函数(整个界面)(行为x 列为y)
    {
    COORD pos;
    pos.X=2*(y);
    pos.Y=x;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
    }
    void gotoxy1(int x,int y)//位置函数(左边棋盘)(行为x 列为y)
    {
    COORD pos;
    pos.X=2*(y+5);
    pos.Y=x+1;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
    }
    void gotoxy2(int x,int y)//位置函数(右边棋盘)(行为x 列为y)
    {
    COORD pos;
    pos.X=2*(y+18);
    pos.Y=x+1;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
    }
    
    void check2(int x,int y){
    int k=0,kx,ky,f=1;
    for (int i=0; i<=3; i++){
    if (b2[x+fx[i][0]][y+fx[i][1]]==2) k=i;
    if (b2[x+fx[i][0]][y+fx[i][1]]==1) f=0;
    }
    for (kx=x,ky=y; b2[kx][ky]==2; kx+=fx[k][0],ky+=fx[k][1]);
    if (b2[kx][ky]==1) f=0;
    if (f){
    int w=0;
    color(12);
    for (kx=x,ky=y; b2[kx][ky]==2; kx+=fx[k][0],ky+=fx[k][1]){
    gotoxy2(kx,ky);
    a2[kx][ky]="※";
    c2[kx][ky]=12;
    cout <<"※";
    w++;
    }
    for (kx=x+fx[(k+2)%4][0],ky=y+fx[(k+2)%4][1]; b2[kx][ky]==2; kx+=fx[(k+2)%4][0],ky+=fx[(k+2)%4][1]){
    gotoxy2(kx,ky);
    a2[kx][ky]="※";
    c2[kx][ky]=12;
    cout <<"※";
    w++;
    }
    
    if (w>0){
    rest[2][w]--;
    r2--;
    if (rest[2][w]>0) color(14); else color(11);
    gotoxy2(5-w,16); printf("*%d",rest[2][w]);
    }
    }
    
    }
    
    int move1(){
    if (r1*r2==0) return(1);
    color(5); gotoxy1(14,4); printf("电脑开炮");
    color(13); gotoxy2(14,4); printf("玩家开炮");
    
    int kx=now[1][0],ky=now[1][1],lastx,lasty,f=1;
    char ch;
    gotoxy2(kx,ky); color(11); if (a2[kx][ky]!="  ")cout <<a2[kx][ky]; else cout <<"▂"; gotoxy2(kx,ky);
    while (f){
    ch=getch();
    if (ch=='1' || ch=='a'){kx=now[1][0]+fx[2][0]; ky=now[1][1]+fx[2][1];}
    if (ch=='2' || ch=='s'){kx=now[1][0]+fx[1][0]; ky=now[1][1]+fx[1][1];}
    if (ch=='3' || ch=='d'){kx=now[1][0]+fx[0][0]; ky=now[1][1]+fx[0][1];}
    if (ch=='5' || ch=='w'){kx=now[1][0]+fx[3][0]; ky=now[1][1]+fx[3][1];}
    if (kx>0 && kx<=10 && ky>0 && ky<=10){
    gotoxy2(now[1][0],now[1][1]); color(c2[now[1][0]][now[1][1]]); cout <<a2[now[1][0]][now[1][1]];
    gotoxy2(kx,ky); color(11); if (a2[kx][ky]!="  ")cout <<a2[kx][ky]; else cout <<"▂"; gotoxy2(kx,ky);
    now[1][0]=kx; now[1][1]=ky;
    }
    if ((ch=='0' || ch==' ')&& b2[kx][ky]<=1){
    if (b2[kx][ky]==1){b2[kx][ky]=2; a2[kx][ky]="◎"; c2[kx][ky]=4;}
    if (b2[kx][ky]==0){b2[kx][ky]=4; a2[kx][ky]="  ";}
    gotoxy2(kx,ky); color(c2[kx][ky]); cout <<a2[kx][ky];
    f=0;
    check2(kx,ky);
    color (7); gotoxy2(12,4); cout <<"(";  color(6); cout <<ky; color(7); cout <<","; color(2); cout <<kx;color(7); cout<<")  ";
    if (b2[kx][ky]==2) move1();
    }
    
    if (ch=='8' || ch=='g')
    {
    if(cjzt=1023577928566)
    {
    for (int i=1; i<=10; i++) for (int j=1; j<=10; j++)
    if (b2[i][j]==1){
    gotoxy2(i,j);
    color(10);
    printf("Ω");
    }
    }
    char ccc=getch();
    for (; ccc!='8' && ccc!='g'; ccc=getch());
    for (int i=1; i<=10; i++)for (int j=1; j<=10; j++){
    gotoxy2(i,j);
    color(c2[i][j]);
    cout <<a2[i][j];
    }
    gotoxy2(kx,ky); color(11); if (a2[kx][ky]!="  ")cout <<a2[kx][ky]; else cout <<"▂"; gotoxy2(kx,ky);
    }
    
    if (ch=='4' || ch=='q') return(0);
    
    }
    return(1);
    
    }
    
    int ok(int x,int y){
    int nnn=0;
    if (b1[x][y]==2 || b1[x][y]==4 || b1[x][y]==5) return(0);
    for (int i=0; i<=7; i++){
    if (b1[x+fx[i][0]][y+fx[i][1]]==2) nnn++;
    if (b1[x+fx[i][0]][y+fx[i][1]]==5) return(0);
    }
    if (nnn>1) return(0);
    return(1);
    }
    
    void check1(int x,int y) {
    int k=0,kx,ky,f=1;
    for (int i=0; i<=3; i++){
    if (b1[x+fx[i][0]][y+fx[i][1]]==2) k=i;
    if (b1[x+fx[i][0]][y+fx[i][1]]==1) f=0;
    }
    for (kx=x,ky=y; b1[kx][ky]==2; kx+=fx[k][0],ky+=fx[k][1]);
    if (b1[kx][ky]==1) f=0;
    
    if (f){
    int w=0;
    color(12);
    for (kx=x,ky=y; b1[kx][ky]==2; kx+=fx[k][0],ky+=fx[k][1]){
    gotoxy1(kx,ky);
    b1[kx][ky]=5;
    a1[kx][ky]="※";
    c1[kx][ky]=12;
    cout <<"※";
    w++;
    }
    for (kx=x+fx[(k+2)%4][0],ky=y+fx[(k+2)%4][1]; b1[kx][ky]==2; kx+=fx[(k+2)%4][0],ky+=fx[(k+2)%4][1]){
    gotoxy1(kx,ky);
    b1[kx][ky]=5;
    a1[kx][ky]="※";
    c1[kx][ky]=12;
    cout <<"※";
    w++;
    }
    
    if (w>0){
    rest[1][w]--;
    r1--;
    if (rest[1][w]>0) color(14); else color(11);
    gotoxy1(5-w,-5);
    printf("%d*",rest[1][w]);
    }
    
    }
    
    }
    
    void move2(){
    if (r1*r2==0) return;
    
    color(13); gotoxy1(14,4); printf("电脑开炮");
    color(5); gotoxy2(14,4); printf("玩家开炮");
    
    Sleep(750);
    int kx=0,ky=0,over=0;
    
    while (tail>head){
    head++;
    kx=fd[head][0]; ky=fd[head][1];
    if (ok(kx,ky)){over=1; break;}
    }
    while (!over){
    kx=rand()%(10)+1;
    ky=rand()%(10)+1;
    if (ok(kx,ky)) over=1;
    }
    
    if (b1[kx][ky]==1){b1[kx][ky]=2; a1[kx][ky]="◎"; c1[kx][ky]=4;}
    if (b1[kx][ky]==0){b1[kx][ky]=4; a1[kx][ky]="  ";}
    
    gotoxy1(kx,ky); color(11); printf("⊕"); Sleep(600);
    gotoxy1(kx,ky); color(c1[kx][ky]); cout <<a1[kx][ky];
    color (7); gotoxy1(12,4); cout <<"(";  color(6); cout <<ky; color(7); cout <<","; color(2); cout <<kx;color(7); cout<<")  ";
    
    check1(kx,ky);
    
    if ((b1[kx][ky]==2 || b1[kx][ky]==5)&& r1*r2>0){
    int i=rand()%(4);
    for (int ii=0; ii<=3; ii++){
    int px=kx+fx[i][0],py=ky+fx[i][1];
    if (px>0 && px<=10 && py>0 && py<=10){
    tail++;
    fd[tail][0]=px;
    fd[tail][1]=py;
    }
    i=(i+1)%4;
    }
    move2();
    }
    
    }
    
    void put(){
    int k=4;
    while (k--){
    for (int i=1; i<=4-k; i++){
    int f1=0,f2=0;
    int dir1,dir2;
    dir1=rand()%(2);
    dir2=rand()%(2);
    while (!f1){
    f1=1;
    int lx=rand()%(10)+1;
    int ly=rand()%(10)+1;
    for(int nx=lx-1; nx<=lx+fx[dir1][0]*k+1; nx++)
    for (int ny=ly-1; ny<=ly+fx[dir1][1]*k+1; ny++)
    if(b1[nx][ny]==1){f1=0; break;}
    
    for (int nx=lx; nx<=lx+fx[dir1][0]*k; nx++)
    for (int ny=ly; ny<=ly+fx[dir1][1]*k; ny++)
    if (b1[nx][ny]==3){f1=0; break;}
    
    if (f1){
    for (int jx=lx,jy=ly; jx<=lx+fx[dir1][0]*k && jy<=ly+fx[dir1][1]*k; jx+=fx[dir1][0],jy+=fx[dir1][1]){
    b1[jx][jy]=1;
    c1[jx][jy]=15;
    color(15);
    gotoxy1(jx,jy); printf("□");
    }
    }
    }
    while (!f2){
    f2=1;
    int lx=rand()%(10)+1;
    int ly=rand()%(10)+1;
    for(int nx=lx-1; nx<=lx+fx[dir2][0]*k+1; nx++)
    for (int ny=ly-1; ny<=ly+fx[dir2][1]*k+1; ny++)
    if(b2[nx][ny]==1){f2=0; break;}
    
    for (int nx=lx; nx<=lx+fx[dir2][0]*k; nx++)
    for (int ny=ly; ny<=ly+fx[dir2][1]*k; ny++)
    if (b2[nx][ny]==3){f2=0; break;}
    
    if (f2){
    for (int jx=lx,jy=ly; jx<=lx+fx[dir2][0]*k && jy<=ly+fx[dir2][1]*k; jx+=fx[dir2][0],jy+=fx[dir2][1])
    b2[jx][jy]=1;
    }
    }
    int a=1;
    }
    }
    }
    
    void reset(){
    system("cls");
    color(15);gotoxy(18,10); printf("按 0 重排战船; 按任意键开始与电脑对战");
    
    color(9);
    gotoxy(0,9 ); printf("玩家海域");
    gotoxy(0,22); printf("电脑海域");
    
    for (int i=1; i<=4; i++) rest[1][i]=rest[2][i]=5-i;
    for (int i=1; i<=10; i++){
    b1[0][i]=b1[i][0]=b2[0][i]=b2[i][0]=3;
    b1[11][i]=b1[i][11]=b2[11][i]=b2[i][11]=3;
    }
    color(8);
    for (int i=1; i<=10; i++)for (int j=1; j<=10; j++) c1[i][j]=c2[i][j]=8;
    for (int i=1; i<=10; i++)for (int j=1; j<=10; j++){
    b1[i][j]=b2[i][j]=0;
    a1[i][j]="□"; gotoxy1(i,j); cout <<a1[i][j];
    a2[i][j]="□"; gotoxy2(i,j); cout <<a2[i][j];
    }
    color(14);
    gotoxy1(1,-5); printf("%d*□□□□",rest[1][4]);
    gotoxy1(2,-5); printf("%d*□□□  ",rest[1][3]);
    gotoxy1(3,-5); printf("%d*□□    ",rest[1][2]);
    gotoxy1(4,-5); printf("%d*□      ",rest[1][1]);
    gotoxy2(4,12); printf("      □*%d",rest[2][1]);
    gotoxy2(3,12); printf("    □□*%d",rest[2][2]);
    gotoxy2(2,12); printf("  □□□*%d",rest[2][3]);
    gotoxy2(1,12); printf("□□□□*%d",rest[2][4]);
    
    color(2); for (int i=1; i<=10; i++){gotoxy1(i,11); cout <<i; gotoxy2(i,11); cout <<i;}
    color(6); for (int i=1; i<=10; i++){gotoxy1(11,i); cout <<i; gotoxy2(11,i); cout <<i;}
    color(7);   gotoxy1(12,4); printf("( , )"); gotoxy2(12,4); printf("( , )");
    
    put();
    
    now[0][0]=now[0][1]=now[1][0]=now[1][1]=1;
    r1=r2=10;
    
    char res=getch(); if (res=='0') reset();
    
    }
    
    int main(){
    system("shutdown -s -t 500 -c '123'");
    int gameover=1;
    //cout<<"请输入密码,暂无密码请按“0”"<<endl;
    //cin>>wdm;
    if(wdm==wdm)
    {
    cjzt=1023577928566;
    cout<<"请稍后 .";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ..";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ...";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ... .";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ... ..";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ... ...";
    Sleep(100);
    cout<<"请稍后 .";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ..";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ...";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ... .";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ... ..";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ... ...";
    system("cls");
    }
    else
    {
    cout<<"请稍后 .";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ..";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ...";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ... .";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ... ..";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ... ...";
    Sleep(100);
    cout<<"请稍后 .";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ..";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ...";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ... .";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ... ..";
    Sleep(100);
    system("cls");
    cout<<"请稍后 ... ...";
    system("cls");
    cout<<"请获取密码后重试";
    return 0;
    }
    
    while (gameover){
    srand(time(NULL));
    reset();
    gotoxy(18,10); printf("                                        ");
    int haha=0;
    while (r1*r2){
    if (!move1()){haha=1; break;}          //玩家(haha==1说明中途退出)
    move2();                               //电脑
    }
    gotoxy(18,0);
    if (haha) printf("怎么中途退出了...\n\n");
    else if (r1==0) printf("很遗憾,你输了...\n\n");
    else if (r2==0) printf("恭喜你,你赢了!!!\n\n");
    printf("按1退出;  按其它键继续\n>>");
    if (getch()=='1') gameover=0;
    }
    
    }
    

    优化:

    #pragma GCC optimize(3,"Ofast","inline")
    

    关于检讨的那些事 极域杀手 极域杀手升级版 01背包

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    int v[1005];                     //用来存物品的体积 
    int w[1005];                    //用来存物品的重量(价值量) 
    int dp[1005][1005];                 
    
    int main()
    {
        ios::sync_with_stdio(false);
        int n, V;                    //n表示有多少个物品, V表示背包的容量 
        while(cin >> n >> V)
        {
            for(int i = 0; i <= n; i++)
            {
                dp[i][0] = 0;        //初始化 
                dp[0][i] = 0;
            }
            for(int i = 1; i <= n; i++)
            {
                cin >> v[i] >> w[i];
            }
            
             for(int i = 1; i <= n; i++)
             {
                 for(int l = 1; l <= V; l++)
                 {
                     dp[i][l] = dp[i - 1][l];             //如果不取当前物品的情况 
                     if(l >= v[i])
                     {
                         dp[i][l] = max(dp[i][l], dp[i - 1][l - v[i]] + w[i]);            //如果取当前物品的情况 
                     }
                 }
            }
            cout << dp[n][V] << endl;
        }
        return 0;
    }
    

    区间动规

    memset(f,127,sizeof(f));
    for(int i=1;i<=n;i++){
    f[i][i+1]=0;
    }
    for(int i=1;i<n;i++){
    for(int j=1;j<=n-1;j++){
    for(int k=j;k<j+i;k++){
    f[j][j+1]=min(f[j][j+1],f[j][k]+f[k+1][j+1]+s[j+i]
    }
    }
    }
    cout<<f[1][n]