- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在为 Battleship 程序中的网格分配内存时遇到问题。虽然我不必创建整个游戏(只是设置),但我对 malloc
并不十分熟悉,所以我一直难以在我的代码中实现它。基本上,我不知道该怎么做。有什么建议吗?
另一个问题是我需要一个函数来随机生成这两个部分的位置,一艘航母(5 个单位长)和一艘战列舰(4 个单位长)而不让它们重叠。我不确定如何调用数组或显示片段。
输出应该是这样的:
到目前为止,这是我的代码:
/*
HEADER:
Author: Laura Kent
Date: 11/23/2014
Purpose: In this code, the user plays a simple game of battle ship on a 10x10 board, in which both hidden pieces must be sunk within a certain number of moves.
It is the coder's job to make sure the locations of each piece are random and do not over-lap.
The game must be explained beforehand and set to one of the three difficulties that the user selected.
After each update, the board display must be updated. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 10;
void menu(void);
void dispBoard(int board[][SIZE]);
int main()
{
headerinfo();
menu();
char lvl[50];
int board[SIZE][SIZE];
int line, column, count=0, attempt;
/*Another void function is used to print out the main menu which then loops back in the main function so the user can choose other options.*/
while(1)
{
printf("\tSelect your difficulty( easy, normal, hard):");
gets(lvl);
if(strncmp(lvl,"easy",4)==0)
{
attempt = 30;
}
else if (strncmp(lvl,"normal",6)==0)
{
attempt = 25;
}
else if (strncmp(lvl,"hard",4)==0)
{
attempt = 20;
}
else
{
printf("Invalid input!/n");
}
*board = (int *)malloc(SIZE * SIZE * sizeof(int));
for (line=0 ; line < SIZE ; line++ )
{
for(column=0 ; column < SIZE ; column++ )
{
*(board + line*SIZE + column) = ++count;
}
}
dispBoard(board);
}
return 0;
}
/*This function justs prints out the coder's header info through a void function.*/
void headerinfo (void)
{
printf ("********************************\nc\nAuthor: Laura Kent lek0073\nCSCE 1030\n********************************\n\n");
}
/*This function prints out the main menu for the game, which is a intro message and the instructions for the player. The difficulty attempts are also mentioned.*/
void menu(void)
{
printf("\t\t\t\t\t\t\tWellcome to battleship!\n\tThe objective of this game if for you, the player to sink both of the hidden vessels by guessing their locations on a 10x10 board.\n\tThe two ships are an aircraft carrier (A) that is 5 spaces long and a battleship (B) that is 4 spaces long.\n\tThe location of theses vessels are random so either can be found in a row or column. It is up to the player to guess a square where they might be.\n");
printf("\tIf the player's guess is a miss, that spot will be marked with an '0' but if it is a hit then a '1' will appear, otherwise all squares will be blank.\n");
printf("\tLastly, each difficulty has a certain amount of attempts: easy (30 attempts), normal (25 attempts), hard (20 attemps).\n\n");
}
void dispBoard(int board[][SIZE])
{
int line, column;
printf("\t1 \t2 \t3 \t4 \t5 \t6 \t7 \t8 \t9 \t10");
printf("\n");
for (line='A'; line <= 'J'; line++ ){
printf("%c",line);
for(column=0; column < SIZE; column++ ){
if(board[line][column]==-1){
printf("\t!");
}else if(board[line][column]==0){
printf("\t*");
}else if(board[line][column]==1){
printf("\tX");
}
}
printf("\n");
}
}
最佳答案
你做错了。
int board[SIZE][SIZE];
这里您已经有了静态分配的网格。
*board = (int *)malloc(SIZE * SIZE * sizeof(int));
这不是你想要做的,除非你想创建一个 3D 战舰 map :*board
将是一个 2D 数组,所以 board
将是 3D。无论如何,这是静态和动态分配之间的糟糕混合:您不需要 malloc
。
关于生成随机位置,这里有一个建议:
i
和j
,都是<SIZE
cell[i][j]
是免费的然后随机生成一个方向并确保连续的单元格是免费的另外,关于代码:
void dispBoard(int board[][SIZE])
应该是 void dispBoard(int board[SIZE][SIZE])
以保持一致性line
声明为 int
但您将其用作 char
关于C Battleship程序malloc内存分配和放置船只,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27140885/
我正在尝试自学 C++,所以我正在做一个 Battleship 程序。我有一个 Ship、Board 和 BattleShip Driver 类。 这个版本相当标准。玩家输入一个单元格的坐标以尝试击中
题目地址:https://leetcode.com/problems/battleships-in-a-board/description/ 题目描述 Given an 2D board, cou
是否有人能够为我提供一种简单的方法,在我设计的只有一个敌人的游戏中实现第二艘敌方战舰,这是我目前的代码: import java.util.*; //Scanner that reads user i
我在随机化和将 2x2 飞船添加到游戏板时遇到了问题。我需要它看起来像下面这样: 目前我似乎只能得到一艘 1x1 的船,并且不太理解添加 2x2 并随机化以便它们全部连接的逻辑。 此外,当用户在主菜单
我正在尝试在 http://thevirtuosi.blogspot.com/2011/10/linear-theory-of-battleship.html 复制发现结果.他的发现是,随后较小尺寸的
我试图让我的网格显示如下: 1 2 3 4 A- - - - B- - - - C- - - - D- - - - 我尝试了各种方法,但似乎无法让它发挥作用。有人有什么建议吗? 此外,在
我已经为此苦苦挣扎了大约 2 个小时。出于某种原因,而不是将字符放在构成我的棋盘的 ~ 上,而是将字符放置在不是我输入的坐标的随机位置。希望有人能帮助我指引正确的方向。 void place_ship
我正在尝试自学 C++,所以我正在做一个 Battleship 程序。我有一个船舶和董事会类(class)。 这个版本相当标准。玩家输入一个单元格的坐标以尝试击中一艘船。说明船只是否被击中的程序。如果
我对这段代码有疑问: import java.util.Random; public class DotComObjects { public int[][] setBarcos(int table
人们!所以,我正在尝试使用基本的数组和方法知识用 Java 制作战舰游戏(经典!)。我创建了一个 2 维的 boolean 板来放置我的船,这是我的代码: public void placerBate
大家星期天快乐! 我正在尝试自学 C++,所以我正在做一个 Battleship 程序。 这个版本相当标准。玩家输入一个单元格的坐标以尝试击中一艘船。说明船只是否被击中的程序。如果一艘船占据的所有单元
我刚开始学习 python,在尝试编写一个简单的 1-D 版单人战舰时遇到了一些麻烦。 2 件我似乎无法解决的事情: 我创建了一个一维列表(这是游戏面板),但需要显示/打印列表重复元素的索引。换句话说
def random_row(board): return randint(0 , len(board) - 1) def random_col(board): return ra
我正在用 C++ 编写 Battleship 游戏,但无法使打印板代码正常工作。我收到以下错误 fatal error LNK1169:找到一个或多个多重定义的符号。任何帮助,将不胜感激。 代码如下:
我是一名优秀的程序员,十分优秀!