疯狂游戏 游戏开发 研发岗笔试

562 阅读5分钟

编程题

(23.07.02疯狂游戏 游戏开发实习生 研发岗笔试_牛客网 (nowcoder.com))

1. (20分)输入k和target,k在数组里,那么2k+1或者3k+1也在数组里,问数组中有无等于target的数,若有则输出true,没有则输出false

编程题提交的代码:

1.go

你可以通过使用深度优先搜索(DFS)来解决这个问题。首先,你需要构建一个函数,该函数从给定的数字 k 出发,通过执行 2k+13k+1 操作,递归地搜索数组中是否存在等于 target 的数。以下是一个用 Go 语言实现的示例代码:

package main

import "fmt"

func canFindTarget(arr []int, k, target int) bool {
    if k < 0 || k >= len(arr) {
        return false
    }

    if arr[k] == target {
        return true
    }

    return canFindTarget(arr, 2*k+1, target) || canFindTarget(arr, 3*k+1, target)
}

func main() {
    arr := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    k := 2
    target := 8

    result := canFindTarget(arr, k, target)
    fmt.Println(result) // 输出 true
}

在这个示例中,canFindTarget 函数使用递归进行深度优先搜索。对于给定的 k,函数首先检查是否越界,然后检查数组中的数是否等于 target。如果不等于,则继续递归地搜索 2k+13k+1 的位置。如果最终找到了等于 target 的数,则返回 true,否则返回 false

你可以根据实际需要调整输入数组 arr、起始数 k 和目标数 target

2.(30分)输入width和一个vector像图数组,输出按照垂直翻转的像素图,4个数表示一个像素点大概要求的输入输出效果如下输入:2,[1,2,3,4,2,2,2,2,3,3,3,3,4,4,4,4]输出:[2,2,2,2,1,2,3,4,4,4,4,4,3,3,3,3]

给你一个数,例如2就是两个组两个组换位置。 当然,以下是经过详细注释的 Go 代码示例,实现与给定的 C++ 代码相同的功能:

package main

import (
	"fmt"
)

// flipImage 函数将输入的像素图进行垂直翻转
func flipImage(width int, pixels []int) []int {
	// 初始化一个数组用于暂存像素值
	a := make([]int, width*4+1)
	var v []int

	// 遍历输入像素图中的每个像素
	for i := 0; i < len(pixels); i++ {
		// 将像素值存入暂存数组 a 中
		a[i%(width*4)] = pixels[i]
		// 当暂存数组 a 已满
		if (i+1)%(width*4) == 0 {
			// 从后往前按列处理
			for j := width; j >= 1; j-- {
				// 遍历每列中的四个像素
				for k := (j-1)*4; k <= (j-1)*4+3; k++ {
					// 将垂直翻转后的像素值加入结果数组 v
					v = append(v, a[k])
				}
			}
		}
	}

	return v
}

func main() {
	// 定义像素图的宽度和输入像素数组
	width := 2
	pixels := []int{1, 2, 3, 4, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4}

	// 调用 flipImage 函数进行垂直翻转
	result := flipImage(width, pixels)

	// 输出结果
	fmt.Println(result) // 输出 [3 3 3 3 2 2 2 2 1 2 3 4 4 4 4 4]
}

这个示例中的注释详细解释了每个步骤的目的和操作,希望这能够帮助你更好地理解代码的执行流程。

写自己的游戏开发经验,关键技术点,遇到的困难,设计模式,时间空间复杂度。

在制作 Go 游戏过程中,可能会遇到以下一些技术问题:

  1. 游戏引擎选择: 选择适合的游戏引擎或库是关键。Go 并不是主流的游戏开发语言,但一些库如 Ebiten 和 Pixel 可以帮助你在 Go 中开发游戏。

  2. 性能优化: 游戏通常需要高性能,因此你需要考虑如何有效地处理图形渲染、物理模拟等方面的任务,以确保游戏运行流畅。

  3. 并发和并行处理: Go 在并发方面非常强大,但在游戏中如何合理地使用并发和并行处理是一个技术挑战。这涉及到游戏中的任务调度、线程安全等问题。

  4. 碰撞检测: 在游戏中需要进行碰撞检测以判断游戏中的物体是否相交。如何高效地进行碰撞检测是一个重要的技术问题。

  5. 资源管理: 游戏涉及图形、音效、文本等资源,如何有效地管理和加载这些资源是一个挑战。

  6. 用户输入处理: 游戏需要响应用户的输入,如何正确地处理用户输入以实现游戏交互是一个关键问题。

  7. 时间复杂度/空间复杂度的分析: 在游戏开发中,需要对算法和数据结构进行分析,以确保游戏在性能方面表现良好。

  8. 设计模式的应用: 在游戏开发中,一些设计模式如单例、状态机、观察者等可以帮助组织代码,使其更具可维护性和可扩展性。

  9. 多平台支持: 跨平台支持是一个重要问题,你可能需要考虑如何将游戏移植到不同的操作系统和设备。

  10. 用户界面设计: 如果游戏需要用户界面,如何设计和实现一个易用且美观的界面是一个挑战。

  11. 游戏性和平衡: 游戏设计涉及到游戏性和平衡问题,如何设计有趣且平衡的游戏机制是一个技术和创意的结合。

  12. 测试和调试: 游戏开发中需要进行各种测试和调试,确保游戏的稳定性和可玩性。

设计上的不足和相应的解决方案会因具体情况而异。这可能涉及到游戏关卡设计、用户体验改进、图形效果优化等。解决这些问题需要结合实际情况进行分析和优化。

总之,游戏开发是一个综合性的领域,需要涵盖多个技术和创意方面。在实际开发中,你可能会遇到上述问题中的一部分或多部分,需要根据具体情况进行解决。