Hallo, alle miteinander! Die Idee für diesen Artikel kam vor einem Monat, aber da ich bei der Arbeit beschäftigt war, fehlte mir die Zeit. Eines Abends stieß ich auf YouTube auf ein Video über das Erstellen eines Pixel-Art-Plattformspiels. Und dann erinnerte ich mich an meinen ersten Informatikunterricht in der Schule, in dem wir "BASIC eingezeichnet" und "die Krähe isst Buchstaben" gespielt haben.
Vorwort
Das Jahr war 2000. Die Krise von 98 ist vorbei. Ich war in der 8. Klasse einer örtlichen Schule in einer kleinen Stadt. Zu Beginn des Schuljahres erwartete alle eine kleine Veranstaltung - eine Informatikstunde wurde eingeführt. Viele behandelten dies als ein weiteres Fach, das unterrichtet werden muss, aber es gab auch solche, deren Augen leuchteten. Ich war unter den letzteren.
Es sei darauf hingewiesen, dass die Informatik zwar eingeführt wurde, sie jedoch vergaßen, "neue Computer einzuführen", da für diese Zwecke kein Geld zur Verfügung stand. Zu dieser Zeit wurde unsere Schule von Maschinen aus der UdSSR - " Electronics MC 0511 " - und einigen ihrer etwas moderneren Gegenstücke bedient. Sie arbeiteten nur nach ihren eigenen Gesetzen oder nach der Ankunft eines bestimmten "Nikolai Vladimirovich" - eines örtlichen Meisters.
"" - 26 , . . . , . , .
, , . - , , .
BufferedImage. , .
fun drawPixel(
x:Int, y:Int, red:Int, green:Int, blue: Int,
image: BufferedImage
) {
image.setRGB(x, y, Color(red,green,blue).rgb)
}
, . , - redRng, greenRng blueRng .
fun drawRandImage(
image: BufferedImage, stepSize: Int = 1,
redRng: Int = 255, greenRng: Int = 255, blueRng: Int = 255
) {
for(posX in 0 until image.width step stepSize){
for (posY in 0 until image.height step stepSize) {
val r = if (redRng <= 0) 0 else Random.nextInt(0, redRng)
val g = if (greenRng <= 0) 0 else Random.nextInt(0, greenRng)
val b = if (blueRng <= 0) 0 else Random.nextInt(0, blueRng)
drawPixel(posX, posY, r, g, b, image)
}
}
}
stepSize , .
- . . ImageIO. - , Thread.
fun writeImage(img: BufferedImage, file: String) {
val imgthread = Thread(Runnable {
ImageIO.write(img, File(file).extension, File(file))
})
try {
imgthread.start()
} catch (ex: Exception) {
ex.printStackTrace()
imgthread.interrupt()
}
}
, "" .
ArrayList<List<Int>>. "" drawTitle, "" drawPixel, "big pixel" .
fun drawTile(
startX: Int, startY: Int, size: Int,
red: Int, green: Int, blue: Int, image: BufferedImage
) {
for (posX in startX until startX+size) {
for (posY in startY until startY+size) {
drawPixel(posX,posY,red,green,blue,image)
}
}
}
. -. when 4 …
fun drawImage(pixels: ArrayList<List<Int>>, image: BufferedImage) {
pixels.forEachIndexed { posY, row ->
row.forEachIndexed { posX, col ->
when(col) {
1 -> drawTile(posX*10,posY*10,10,255,2,0,image)
2 -> drawTile(posX*10,posY*10,10,156,25,31,image)
3 -> drawTile(posX*10,posY*10,10,255,255,255,image)
else -> drawTile(posX*10,posY*10,10,23,0,44,image)
}
}
}
}
… , (1 = , 2 = -, 3 = , 4 = )
val map = arrayListOf(
listOf(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
listOf(0,0,0,1,1,1,0,0,0,1,2,2,0,0,0),
listOf(0,0,1,3,3,1,1,0,1,1,1,2,2,0,0),
listOf(0,1,3,3,1,1,1,1,1,1,1,1,2,2,0),
listOf(0,1,3,1,1,1,1,1,1,1,1,1,2,2,0),
listOf(0,1,1,1,1,1,1,1,1,1,1,1,2,2,0),
listOf(0,1,1,1,1,1,1,1,1,1,1,1,2,2,0),
listOf(0,0,1,1,1,1,1,1,1,1,1,2,2,0,0),
listOf(0,0,0,1,1,1,1,1,1,1,2,2,0,0,0),
listOf(0,0,0,0,1,1,1,1,1,2,2,0,0,0,0),
listOf(0,0,0,0,0,1,1,1,2,2,0,0,0,0,0),
listOf(0,0,0,0,0,0,1,2,2,0,0,0,0,0,0),
listOf(0,0,0,0,0,0,0,2,0,0,0,0,0,0,0),
listOf(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
)
... . "" .
, " " , - , . , , .
Excel
. JS (React JS), , JavaScript . - …
, Excel. - . . " " - , Apache POI - word, excel, pdf. , .
hex rgba, Color.
val toRGBA = { hex: String ->
val red = hex.toLong(16) and 0xff0000 shr 16
val green = hex.toLong(16) and 0xff00 shr 8
val blue = hex.toLong(16) and 0xff
val alpha = hex.toLong(16) and 0xff000000 shr 24
Color(red.toInt(),green.toInt(),blue.toInt(),alpha.toInt())
}
, .
fun getPixelColors(file: String, listName: String): ArrayList<List<String>> {
val table = FileInputStream(file)
val sheet = WorkbookFactory.create(table).getSheet(listName)
val rowIterator: Iterator<Row> = sheet.iterator()
val rowArray: ArrayList<Int> = ArrayList()
val cellArray: ArrayList<Int> = ArrayList()
while (rowIterator.hasNext()) {
val row: Row = rowIterator.next()
rowArray.add(row.rowNum)
val cellIterator = row.cellIterator()
while (cellIterator.hasNext()) {
val cell = cellIterator.next()
cellArray.add(cell.address.column)
}
}
val rowSize = rowArray.maxOf { el->el }
//...
//...
return pixelMatrix
}
( ). , , . .
, , . ...
val rows = sheet.lastRowNum
val cells = sheet.getRow(rows).lastCellNum // + rows
val pixArray = Array(rows+1) {Array(ccc+1) {""} }
... OutOfBounds. (row) , , . , "", . iterator.hasNext(), .
- " " BufferedImage. , - TYPE_INT_ARGB, .
fun renderImage(pixels: ArrayList<List<String>>): BufferedImage {
val resultImage = BufferedImage(
pixels[0].size*10,
pixels.size*10,
BufferedImage.TYPE_INT_ARGB
)
pixels.forEachIndexed { posY, row ->
row.forEachIndexed { posX, col ->
drawTile(
(posX)*10,(posY)*10, 10,
toRGBA(col).red, toRGBA(col).green,toRGBA(col).blue,
toRGBA(col).alpha, resultImage
)
}
}
return resultImage
}
, .
github. ? svg, (blur, glitch, glow, etc..), “ ” , xls (HSSF Color) . - , , - .
, " " (ctrl+c, ctrl+v), "" . , : , , - " ". , , , .
14 , , .
Selbst wenn in ein paar Jahren "MS Electronics" durch moderne Pentium-basierte Gegenstücke ersetzt wurde, werden diese ersten Lektionen auf alten Computern für immer bei mir bleiben, denn sie haben meine Liebe zu Computern und allem, was damit zu tun hat, in mich gesteckt. ..
Wie hat die Informatik an Ihrer Schule angefangen?
Danke an alle! Tschüss zusammen!