• #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;
    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'){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(){int gameover=1;
    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;
    }
    }

海战棋海战棋海战棋海战棋海战棋海战棋海战棋相关推荐

  1. python井字棋游戏人机对战_用Python做一个井字棋小游戏

    井字棋是一个经典的小游戏,在九宫格上玩家轮流画OXO,当每列或每行或是两个对角成一线时便是获胜. 今天就用Python编写一个井字棋小游戏,与电脑对战. 程序执行画面如下图所示: 程序提供了两种人工智 ...

  2. 井字棋小游戏c语言简单编码,C语言实现井字棋小游戏

    C语言实现简单的"井字棋游戏",供大家参考,具体内容如下 总体构造: 1.游戏菜单的逻辑实现 2.游戏本体的代码实现 part 1:游戏菜单的整体逻辑 ①简单的通过一个输入0和1的 ...

  3. 三子棋【入门保姆级】(可以转化为N字棋)

    欢迎大家>  __   < 目录 前言 一.创建棋盘 二.下棋 三.判断输赢 四.游戏运行 完整代码 总结 前言 三子棋,又叫九宫格,是一个比较好上手的小游戏,相信大家曾几何时也与同桌在课 ...

  4. 翻转棋c语言算法,有没有人懂黑白棋(翻转棋)的核心算法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 playchess(int i,int j) { int k,s,m,n,p=i,q=j; if(a[i][j]=2)/黑吃白 { s=i+1; whil ...

  5. c++·C++游戏——海战棋

    c++·C++游戏--海战棋 游戏规则 由电脑随机在敌我双方布好船阵,每艘船周围一格内都不许有其他船. 船有1.2.3.4格大小的,(1格有四艘 2格有三艘 3格有两艘 4格有1艘),双方都只能看不到 ...

  6. c++ 海战棋_GitHub - yifeitao/SimpleProgrammingProblems: 简单编程问题集中译版

    简单编程问题集 我可能也会更新一些自己学习新语言时对这些问题的部分解答. 以下为译文. 计算机入门课上学生需要学习一些编程语言,我当助教的时候发现找到好的练习题很麻烦.类似Project Euler ...

  7. C++各种棋类游戏,种类齐全,十分好玩(海战棋,井字棋,三子棋,象棋,围棋,五子棋)

    五子棋 #include <cstdio> #include <windows.h> #include <cstdlib> #include <conio.h ...

  8. 火箭工作室c++小游戏——海战棋

    火箭工作室第一个c++开发游戏--海战棋 今天是我第一次写博客,发个小游戏给大家当做见面礼. #include <cstdio> #include <ctime> //rand ...

  9. java控制台制作海战棋

    控制台上简易的海战棋: 在这里插入代码片 import java.util.Scanner;public class Battleship {public static int pB = 7;publ ...

  10. c++ 海战棋_编程入门须知:都说零基础不好学编程,那么什么是编程基础?

    在当今网络教学的发达时代,关于编程这一门学科,我们要理解的编程基础,也因为不同时代发生了不同变化. 编程种类所涉及范围很广,领域细分的也很多,同时编程的所用语言不同所需基础也不同;还有,不同编程方式所 ...

最新文章

  1. 互联网或将进入泡沫2.0时代
  2. python有证书考吗-学python需要考证吗?
  3. python webdriver点击指令_测开系列Selenium Webdriver Python(20)--Webdriver运行原理
  4. (一)初识java ---我的第一个java程序
  5. js实现鼠标拖拽功能基本思路
  6. HDU5812 Distance(枚举 + 分解因子)
  7. C语言实现静态顺序表
  8. 【Docker】docker bash: sudo: command not found
  9. 学点 C 语言(3): 转义字符
  10. 哪些是常见的大数据分析模型
  11. i2c-tools 使用集锦
  12. 如何在手机上查银行卡号?进来手把手教你!
  13. 手机html保存工具,用手机保存任何网页视频:Pro Recorder 使用介绍
  14. matlab gram schmidt,如何在 MATLAB 中用 行代码实现 Gram-Schmidt 正交化
  15. MyBatis-Plus 扩展篇 > 自动填充功能
  16. 【MySQL基础】什么是MySQL约束?什么是主键约束?
  17. JavaScript面向对象(上)
  18. WIN8系统的远程桌面漏洞 利用QQ拼音纯净版实现提权
  19. APP自动化测试(一)-appium
  20. .Net框架中的CLR,CTS,ClS的解释

热门文章

  1. 怎么将照片格式转换jpg?这两个图片格式转换方法一看就会
  2. 各大搜索引擎的收录记录入口处
  3. matlab select函数,select函数
  4. 升级IPv6新路由器购买与老路由器巧妙利用
  5. MySQL 默认最大连接数是多少?
  6. R语言ggplot2可视化:使用ggpubr包的ggdensity函数可视化密度图、使用stat_central_tendency函数在密度中添加均值竖线并自定义线条类型
  7. unable to access android sdk add-on list解决方案
  8. 技术人的新风口来了!快选摊位,晚了就要摇号了!
  9. lol自动接受工具源码 分享lolApi相关使用教程
  10. 【蚂蚁链学习4】授予勋章(蚂蚁链智能合约+函数部分应用+事件event)