- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在从事一个涉及开发类似于 nethack 的游戏的项目,我必须只用 C 编写它(无论如何现在)。我的想法是我需要创建由句点 ('.') 组成的房间。这些房间需要随机放置在终端中,我有一个网格(基本上是地牢)。我已经写了一些代码,所以希望你会更加鼓励帮助我解决我的问题。代码贴在下面,我会在下面详细解释它和我的问题。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#include "dungeon.h"
#define HEIGHT 105
#define WIDTH 160
#define N 10
/*Declared the functions that I created.*/
void createDungeon();
bool doOverlap(point l1, point r1, point l2, point r2);
void makeRoom(room aRoom);
int main() {
srand(time(NULL));
createDungeon();
return 0;
}
/*
* Created a function that initializes the dungeon. Each room struct
* has four points that make up the room, and are assigned.
*/
void createDungeon() {
char dungeonGrid[HEIGHT][WIDTH];
//room *rooms = malloc(10 * sizeof(room));
//room *rooms_t = malloc(10 * sizeof(room));
room rooms[N];
int i, y, x, q, r, f;
int a;
int counter = 0;
makeRoom(rooms[counter]);
for (int i = 1; i < 10; i++) {
makeRoom(rooms[i]);
if (doOverlap(rooms[i].top_left, rooms[i].bottom_right, rooms[counter].top_left, rooms[counter].bottom_right)) {
makeRoom(rooms[i]);
counter++;
}
}
/*for (i = 0; i < 10; i++) {
int height = (rand() % (10 + 1 - 5)) + 5;
int width = (rand() % (15 + 1 - 7)) + 7;
int randomY = (rand() % (105 + 1 - 0)) + 0;
int randomX = (rand() % (160 + 1 - 0)) + 0;
rooms[i].top_left.y = randomY;
rooms[i].top_left.x = randomX;
rooms[i].top_right.y = randomY;
rooms[i].top_right.x = randomX + width;
rooms[i].bottom_left.y = randomY + height;
rooms[i].bottom_left.x = randomX;
rooms[i].bottom_right.y = randomY + height;
rooms[i].bottom_right.x = randomX + width;
/*Created two for loops that goes through the dungeon grid and puts a space.*/
for (y = 0; y < HEIGHT; y++) {
for (x = 0; x < WIDTH; x++) {
dungeonGrid[y][x] = ' ';
}
}
/*Created three for loops that go through the dungeon grid and assigns a '.' for each
* point in the room to the grid.
*/
for (y = 0; y < HEIGHT; y++) {
for (x = 0; x < WIDTH; x++) {
for (a = 0; a < 10; a++) {
if (rooms[a].top_left.y <= y && y <= rooms[a].bottom_left.y && rooms[a].top_left.x <= x && rooms[a].top_right.x >= x) {
dungeonGrid[y][x] = '.';
}
}
}
}
/*These two for loops print out every character that it finds in the dungeon grid.*/
for (y = 0; y < HEIGHT; y++) {
for (x = 0; x < WIDTH; x++) {
printf("%c", dungeonGrid[y][x]);
}
printf("\n");
}
}
/*Created a boolean method that deals with the rooms overlapping that takes in
* 4 points, l1 = top left point and r1 = bottom right point of the first rectangle,
* l2 = top left point, and r2 = bottom right point of the second rectangle.
*/
bool doOverlap(point l1, point r1, point l2, point r2) {
if (l1.x > r2.x || l2.x > r1.x) {
return false;
}
if (l1.y < r2.y || l2.y < r1.y) {
return false;
}
return true;
}
void makeRoom(room aRoom)
{
int height = (rand() % (10 + 1 - 5)) + 5;
int width = (rand() % (15 + 1 - 7)) + 7;
int randomY = (rand() % (105 + 1 - 0)) + 0;
int randomX = (rand() % (160 + 1 - 0)) + 0;
aRoom.top_left.y = randomY;
aRoom.top_left.x = randomX;
aRoom.top_right.y = randomY;
aRoom.top_right.x = randomX + width;
aRoom.bottom_left.y = randomY + height;
aRoom.bottom_left.x = randomX;
aRoom.bottom_right.y = randomY + height;
aRoom.bottom_right.x = randomX + width;
}
现在让我稍微解释一下我的代码,起初我只有 2 个函数,createdungeon() 函数和 doOverlapping() 函数,因为如果你看一下我代码的注释 block ,你会发现它是我最初是如何创建我的所有房间并将它们放在一个 malloc 的房间 * 数组中的。这种方式实际上是可行的,因为我能够在终端中打印出我所有的 10 个房间,但问题是重叠,因为在我最初制作的代码中,你先创建所有房间,然后它会很难比较,所以我创建了第三个函数,叫做 makeRoom(),这只会创建一个房间,所以我的想法是我会创建一个房间并将它随机放置在某个地方,然后开始一个 for 循环,其中 i = 1 并与之前的房间进行比较。我放置的首字母,我在上面使用了一个计数器,这样如果有重叠,那么在那个“i”处创建另一个房间,然后增加计数器以便您不断比较您要放置的房间,已经放在它前面的房间。
现在的问题是,我的终端机上没有显示任何房间,我不确定为什么。任何帮助将不胜感激。
编辑:我忘了显示我制作的标题
#ifndef DUNGEON_DUNGEON_H
#define DUNGEON_DUNGEON_H
typedef struct Point {
int y;
int x;
} point;
typedef struct Room {
point top_left;
point top_right;
point bottom_left;
point bottom_right;
} room;
#endif //DUNGEON_DUNGEON_H
最佳答案
正如您的标题所暗示的,问题是您将数据的副本传递给您的 makeRoom 函数,而不是指向实际数据的指针,因此 makeRoom 函数中的更改不会反射(reflect)在调用函数中。
您可以重写您的 makeRoom 函数以接受和使用指针,例如:
void makeRoom(room *aRoom)
{
int height = (rand() % (10 + 1 - 5)) + 5;
int width = (rand() % (15 + 1 - 7)) + 7;
int randomY = (rand() % (105 + 1 - 0)) + 0;
int randomX = (rand() % (160 + 1 - 0)) + 0;
aRoom->top_left.y = randomY;
aRoom->top_left.x = randomX;
aRoom->top_right.y = randomY;
aRoom->top_right.x = randomX + width;
aRoom->bottom_left.y = randomY + height;
aRoom->bottom_left.x = randomX;
aRoom->bottom_right.y = randomY + height;
aRoom->bottom_right.x = randomX + width;
}
然后当你调用它时,你通过引用传递元素,比如:
makeRoom(&rooms[counter]);
关于c - 修复我的代码中矩形的重叠,指针也有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48350746/
我将一个 div 设置为 100% 宽度,当以 1024 分辨率查看页面时,宽度应从 100% 变为 1000px,我让它与@media 查询一起正常工作,并且在 FF、safari chrome 上
希望有人能帮助我,我已经被困了几天了。 将我的 Domino 服务器更新到 9.01 Fix 3 后,我在 javascript 控制台上不断收到错误消息: TypeError: this.edito
我们正在使用一个基于RMI的java应用程序。当我们运行应用程序时,即使应用程序处于理想阶段,内存使用量仍然不断增加。我们主要使用Vector和散列图数据结构。如何最大限度地减少java内存使用/修复
概述 Internet Download Manager (IDM)是最流行的 Windows 下载管理器。如果你平时工作中使用过IDM,您会惊叹 IDM 下载文件的速度有多快。IDM
当我打开 brave 浏览器时,会打开一个窗口(如下所示)。它并没有真正干扰浏览器的处理。但令人担忧的是为什么这种情况一直发生...... Error On Opening Brave Browser
这是我今天在求职面试中被问到的一个问题: 看下面的代码: int n=20; for (int i =0; i
我不小心删除了/opt/local/bin/perl5.8.9 ,这似乎是 macports 编译的 perl 的主要二进制文件。 现在我有很多取决于 perl5 的端口,但不想卸载并重新安装所有端口
>>>flip fix (0 :: Int) (\a b -> putStrLn "abc") Output: "abc" 这是使用翻转修复的简化版本。 我在一些 YouTube 视频中看到了这种使用
这个问题已经有答案了: How can I fix 'android.os.NetworkOnMainThreadException'? (64 个回答) 已关闭 3 年前。 我在 Android 应
def main(): cash = float(input("How much money: ")) coins = 0 def changeCounter(n): whil
前一周我遇到了类似的问题,查询需要永远运行。在编写此查询时,我尝试应用从其他查询中学到的一些知识,但执行起来需要很长时间。 运行查询的两个单独部分时,每个部分需要 2 分钟才能完成,这是可以接受的,但
下午,我的 CSS 有问题。第三个下拉菜单放错了,我没有解决办法。 这是我想要的: 之前: http://i53.tinypic.com/2qu85z8.png 之后: http://i51.tiny
更新方法: override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingS
我知道这是一个很多人都遇到过的问题,但我不熟悉 Less 并且是 Bootstrap 的新手,我正在寻找一种全 CSS 解决方案来防止我的导航栏折叠到 768 像素以下:
在我的布局中,我创建了以下 jsfiddle 托管的可调整大小的粘性页脚。但是,在调整大小时它与内容重叠。有没有办法让它在所有浏览器上都能响应? http://jsfiddle.net/9aLc0mg
我想要实现的目标 racer-offset 是为了让用户可以设置图像可以以 px 为单位移动多远。偏移量管理偏移量。 Speed-racer 告诉我们图像在滚动过程中移动的速度。我的问题是它不会停止。
我有一个简单的自动换行函数,它接受一个长字符串作为输入,然后将该字符串分成更小的字符串,并将它们添加到一个数组中,以便稍后输出。现在最后一两个字没有输出。这是主要问题。但是,我还想改进功能。我知道这有
我试图在使用每个 slider 之前禁用“下一步”按钮,我不确定为什么在单击不再是 class="not-clicked"的同一个 slider 时取消禁用该按钮. JSFiddle: (这里看起来有
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 8 年前。 如何让程序输出所有信息? IT
On this page ,在“生活”下有一个带有自动生成的子菜单的菜单。子菜单存在一些问题(它会闪烁并改变大小——如果你滚动它就会看到)。我需要以某种方式覆盖它当前正在读取的 css 并使其统一。
我是一名优秀的程序员,十分优秀!