我试图用C制作游戏,我的问题是: 我需要在C中使用某种方法,它基本上可以解释这个python代码的作用:
array = list();
len(array) #returns 0
x = 1
array.append(x)
len(array) #returns 1
array.append(2)
len(array) #returns 2
这只是我需要做的基本方法,如果它小于5的测试就是不同大小的数组,原来我的问题是如何操纵游戏中的枪声,创建它们按键盘上的空格(将枪声附加到现在为空的数组),然后我必须做这样的事情,就在C:
for i in range(len(array)):
print array[i]
最初,当循环运行时我必须确定枪声是否可见并且是否可以移动,我不知道如何在C中确定阵列的长度,特别是如果数组具有可变大小(可以及时增加大小) 在Python中,处理这个很容易,但是我不知道如何在C中完成它,因为我的游戏必须在C'因为它适合大学课程。
答案 0 :(得分:2)
我建议使用链表而不是数组,因为您最终会想要删除任意元素。 (子弹1仍在屏幕上移动,但是子弹3击中墙壁,子弹6击中敌人。)您可以直接在子弹结构中执行此操作,而不是作为单独的数据结构:
typedef struct bullet_t {
/* ...game logic... */
struct bullet_t* next;
} bullet;
答案 1 :(得分:1)
C不支持可变大小的数组;如果C ++是一个选项,请转到std::vector
。如果没有,您将必须自己在C中实现它。我个人建议做一些接近于std::vector
的事情 - 每次内存耗尽时,realloc
两倍。
答案 2 :(得分:0)
有不同的方法可以做你想做的事,但我建议链式列表。 基本上,将python代码转换为C代码的问题在于,您必须在大多数时间手动分配变量,并且在此处。所以你可以做一个链式列表,你用malloc分配每个新元素,然后用指针将它链接到列表的其余部分。
然后,要知道大小,只需使用计数器跟随列表。
祝你好运。 ;)答案 3 :(得分:0)
我会推荐一个不同的ADT。例如一个链接列表,或Set ADTs(如果你稍微谷歌,你可能会找到完成的)。但是,如果您绝对需要使用数组,那么您应该查找动态分配的数组。这是一个实现示例。 (未经测试)
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int *array;
int size;
int capacity;
} array_t;
#define ARRAY_INIT_CAPACITY 4
array_t *new_array(){
array_t *arr=malloc(sizeof(array_t));
arr->array=malloc(sizeof(int)*ARRAY_INIT_CAPACITY);
arr->size=0;
arr->capacity=ARRAY_INIT_CAPACITY;
return arr;
}
void increase_array(array_t *array){
int new_capacity=array->capacity*2;
int *new_location = realloc(array->array, new_capacity*sizeof(int));
if (!new_location) {
fprintf(stderr, "Out of memory");
exit(1);
}
array->capacity=new_capacity;
array->array=new_location;
}
void array_append(array_t *array, int item){
if (array->size >= array->capacity){
increase_array(array);
}
array->array[array->size]=item;
array->size+=1;
}
int array_size(array_t *array){
return array->size;
}
array_t *myArray=new_array();
我建议您了解dynamic memory allocation和Arrays in C。 希望它有所帮助:)