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

游戏规则

  • 由电脑随机在敌我双方布好船阵,每艘船周围一格内都不许有其他船。
  • 船有1、2、3、4格大小的,(1格有四艘 2格有三艘 3格有两艘 4格有1艘),双方都只能看不到自己船的布阵方式。
  • 我方在左边,敌方在右边
  • 双方轮流在对方海域内打炮
  • 若射中了对方的船,则可再射一炮
  • 整艘战船都被打到则会有提示整艘船沉了(这里是换符号)
  • 左右的数字是敌我剩下的船种类以及其数量
  • 其实你可以作弊,按了作弊键后就可以看到敌方的船只位置了
  • 有如下两套控制按钮配置
    | 修改布阵 | 控制光标 | 确认射击 | 作弊 |
        0      w,s,d,a   (space)    g0      1,2,3,5      0       8

本游戏含有密码(18位)

私信获取最新(两天一次更新)

坚决拒绝付费下载

我从不提倡!!!

免费代码,敬请参阅

#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(){int gameover=1;cout<<"请输入密码,暂无密码请按“0”"<<endl;cin>>wdm;if(wdm==wdmm){  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;}
}

经本博客大量改变代码发布
https://blog.csdn.net/jackypigpig/article/details/54562613
再次申明,本人无盗版想法

c++·C++游戏——海战棋相关推荐

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

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

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

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

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

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

  4. 童年小游戏三子棋(C语言数组实现)

    目录 认识游戏 游戏框架 游戏实现 基本构思 棋子 棋盘 下棋 判断输赢 效果展示 全部代码 游戏效果 认识游戏 三子棋是黑白棋的一种.三子棋是一种民间传统游戏,又叫九宫棋.圈圈叉叉.一条龙.井字棋等 ...

  5. 利用C语言巧妙实现棋类游戏——三子棋

    小游戏:三子棋用C语言实现 你是否学完了C语言的函数.数组.选择结构.循环结构苦于没有实战小项目巩固自己所学的知识呢,今天小程序猿就给大家带来了一个游戏的小游戏--三子棋,利用C语言实现的,希望对大家 ...

  6. 简单小游戏------三子棋

    目录 前言 一.整体的逻辑 创建菜单 创建棋盘 打印棋盘 玩家下棋 电脑下棋 判断输赢 整合代码 game.c test.c game.h 总结 前言 经典数组游戏三子棋 一.整体的逻辑 1.创建菜单 ...

  7. java控制台制作海战棋

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

  8. Python小游戏——孔明棋

    Python小游戏--孔明棋 规则简介 孔明棋又叫法国独立钻石,是一种单人棋,下法规则简单,棋子只能跳过相邻的棋子到空位上,并且把被跳过的棋子吃掉.棋子可以沿格线横.纵方向跳,但是不能斜跳,当棋盘内所 ...

  9. C语言小游戏——三子棋

    C语言 -- 三子棋 本篇主要是用二维数组和多个函数来实现三子棋游戏. 让我们先来看看这个编写这个游戏的思路:首先要打印三子棋的棋盘,然后是玩家下棋,电脑下棋,最后判断谁赢了,或者看看是否平局. 我们 ...

最新文章

  1. 可恶,新网互联又出问题了
  2. linux6 yum安装mysql_linux CentOS6.5 yum安装mysql 5.6
  3. java笔记之字符串,gc
  4. android 关机充电流程
  5. rest framework错误笔记——身份验证和权限
  6. js Date 对象用于处理日期和时间。
  7. Android 生成随机数,获取一条随机字符串
  8. 从XMLHttpRequest中获取请求的URL
  9. mysql存储过程和自定义函数_MySQL存储过程/存储过程与自定义函数的区别
  10. [面试]排列组合与概率计算(一)
  11. (转载)Sybase:bcp命令参考
  12. java .entryset_Java中map的entrySet()方法返回的是什么内容啊?有点晕
  13. 人民币符号是什么 人民币符号怎么打
  14. 汽车电子(一)--- 整车CAN网络介绍
  15. 医学图像分析的发展历史
  16. Linux修仙之路——RAID技术
  17. WPS下合并doc文档
  18. Fiddler安装与配置
  19. gitlab .gitlab-ci.yml 文件赏析
  20. 查看和学习Java官方文档

热门文章

  1. Notepad++ 替换换行符
  2. 扬州十日记 [明]王秀楚
  3. 解决“可以联网后仍显示无法连接到Internet”
  4. sqlite设密工具如何使用(本人资源)
  5. 自己当笔记写着玩吧--leetcode- 001
  6. pcode.linq
  7. 菜鸟学习c语言之路开始
  8. 只会写代码的程序员不是好程序员
  9. linux下java程序乱码,解决linux下java程序(例如applet)中文乱码问题
  10. 滑块验证成功后,对勾对号显示为根号