プチコンまとめWiki (初代/mkII)

投稿プログラム : フォントアレンジ7種詰め合わせ

2012年5月22日投稿 / 投稿者 : Sunny Clouds / タグ : 投稿プログラム 実用ツール フォント サブルーチン QRコード

概要

昔MSXでよくやっていたフォントの加工をプチコンでやってみました。 ゲーム等に組み込んで使っていただければと思い、投稿することにしました。 いくつかのサブルーチンでできていますので、必要なものを組み合わせて使用してください。

使い方

  1. 実行すると数字とフォント名が列挙され、どれかを選ぶように聞かれます。
  2. 1から7の数字を入力すると選ばれたフォントのタイプフェイスで文字の一覧が表示されます。
  3. その下にフォント名とサブルーチン名が表示されますので、このプログラムからそれらをご自身のプログラムにコピペしてください。

補足

  • もちろん、わざわざタイプフェイスを確認する必要のない方は本プログラムを実行しなくてかまいません。そのまま使用したいルーチンをコピペして使ってください。
  • 基本的に前処理の「@FONT2BIN」とフォントデータ書き換え処理の「@BIN2FONT」は必須です。その間に使いたいフォントへの加工ルーチンが入る形になります。
  • リスト冒頭で宣言している配列変数BとWはワーク変数として必要です。同じように確保して使用してください。
  1. DIM B(256,8)
  2. DIM W(16)
  • 加工するフォントの最初と最後の文字コードは変数STとEDで指定しています。すべての文字を対象とするならST=0,ED=255になります。お望みの範囲に変えてください。
  1. ST=32  ’Start code num
  2. ED=125 ’End code num

スクリーンショット・動画

FONTDEMO1.jpg
FONTDEMO2.jpg

QR コード

プチコンmkII 向けの QR コードです。

PRG:FONTDEMO
1/22/2
qr0.pngqr1.png

プログラムリスト

  1. ’============================
  2. ’FONT ARRANGE
  3. ’============================
  4. CLEAR
  5. DIM B(256,8)
  6. DIM W(16)
  7. ST=32  ’Start code num
  8. ED=125 ’End code num
  9. ’−−−−−−−−−−−−−−−−−−−−−−−−−−−−
  10. DIM A$(7)
  11. A$(0)=”BOLD”
  12. A$(1)=”HEAVY”
  13. A$(2)=”OBLIQUE”
  14. A$(3)=”OBLIQUE_BOLD”
  15. A$(4)=”STENCIL”
  16. A$(5)=”HUSK”
  17. A$(6)=”HUSK_BOLD”
  18. @START
  19.  CLS
  20.  FOR I=0 TO 6
  21.   PRINT (I+1);”.”;A$(I)
  22.  NEXT
  23.  PRINT
  24.  INPUT ”SELECT(1−7)”;A
  25.  IF A<1 OR A>7 GOTO @START
  26.  A=A−1
  27.  GOSUB @INIT
  28.  GOSUB @FONT2BIN
  29.  GOSUB ”@”+A$(A)
  30.  GOSUB @BIN2FONT
  31.  ?
  32.  ? ”<”;A$(A);”>”
  33.  ?
  34.  ? ”use these routines...”
  35.  ?
  36.  ? ”  @FONT2BIN,@”;A$(A);”,”;
  37.  ? ”@BIN2FONT”
  38.  ?
  39. END
  40. ’−−−−−−−−−−−−−−−−− INITIALIZE
  41. @INIT
  42.  ACLS
  43.  CHRINIT ”BGF0”
  44.  GCLS 4
  45.  ?
  46.  ?
  47.  FOR N=ST TO ED
  48.   PRINT CHR$(N);
  49.  NEXT
  50.  ?
  51.  RETURN
  52. ’−−−−−−−−−−− CONVERT BIN DATA
  53. @FONT2BIN
  54.  FOR N=ST TO ED
  55.   CHRREAD(”BGF0”,N),BF$
  56.   FOR I=0 TO 15
  57.    H$=”&H”+(MID$(BF$,I*4,4))
  58.    X=VAL(H$)/15
  59.    W(I)=VAL(”&B”+HEX$(X,4))
  60.   NEXT
  61.   FOR I=0 TO 7
  62.    X=W(I*2)*16
  63.    B(N,I)=X+W(I*2+1)
  64.   NEXT
  65.  NEXT
  66.  RETURN
  67. ’−−−−−−−−−−−−−− SET FONT DATA
  68. @BIN2FONT
  69.  FOR N=ST TO ED
  70.   W$=””
  71.   FOR I=0 TO 7
  72.    X=B(N,I)
  73.    X$=””
  74.    FOR J=0 TO 7
  75.     X$=MID$(”0F”,X%2,1)+X$
  76.     X=FLOOR(X/2)
  77.    NEXT
  78.    W$=W$+X$
  79.   NEXT
  80.   CHRSET ”BGF0”,N,W$
  81.  NEXT
  82.  RETURN
  83. ’−−−−−−−−−−−−−−−−−−−−−−− BOLD
  84. @BOLD
  85.  FOR N=ST TO ED
  86.   FOR I=0 TO 7
  87.    X=B(N,I)
  88.    B(N,I)=X OR FLOOR(X/2)
  89.   NEXT
  90.  NEXT
  91.  RETURN
  92. ’−−−−−−−−−−−−−−−−−−−−−− HEAVY
  93. @HEAVY
  94.  FOR N=ST TO ED
  95.   FOR I=0 TO 7
  96.    X=B(N,I)
  97.    Y=X OR FLOOR(X/2)
  98.    B(N,I)=Y OR FLOOR(X/4)
  99.   NEXT
  100.  NEXT
  101.  RETURN
  102. ’−−−−−−−−−−−−−−−−−−−− OBLIQUE
  103. @OBLIQUE
  104.  FOR N=ST TO ED
  105.   FOR I=0 TO 7
  106.    X=B(N,I)
  107.    Y=X
  108.    IF I<5 THEN Y=FLOOR(X/2)
  109.    IF I<2 THEN Y=FLOOR(X/4)
  110.    B(N,I)=Y
  111.   NEXT
  112.  NEXT
  113.  RETURN
  114. ’−−−−−−−−−−−−−−− OBLIQUE BOLD
  115. @OBLIQUE_BOLD
  116.  FOR N=ST TO ED
  117.   FOR I=0 TO 7
  118.    X=B(N,I)*2
  119.    Y=X
  120.    IF I<5 THEN Y=FLOOR(X/2)
  121.    IF I<2 THEN Y=FLOOR(X/4)
  122.    B(N,I)=Y OR FLOOR(Y/2)
  123.   NEXT
  124.  NEXT
  125.  RETURN
  126. ’−−−−−−−−−−−−−−−−−−−− STENCIL
  127. @STENCIL
  128.  FOR N=ST TO ED
  129.   FOR I=0 TO 7
  130.    X=B(N,I)
  131.    Y=X OR FLOOR(X/2)
  132.    Y=Y OR FLOOR(X/4)
  133. ’  B(N,I)=Y AND &HEF
  134.    B(N,I)=Y AND &HF7
  135. ’  B(N,I)=Y AND &HFB
  136.   NEXT
  137.  NEXT
  138.  RETURN
  139. ’−−−−−−−−−−−−−−−−−−−−−−− HUSK
  140. @HUSK
  141.  FOR N=ST TO ED
  142.   FOR I=0 TO 7
  143.    IF I>6 THEN J=7 ELSE J=I+1
  144.    X=B(N,I)
  145.    Y=X OR FLOOR(X/2)
  146.    B(N,I)=Y AND NOT(B(N,J))
  147.   NEXT
  148.  NEXT
  149.  RETURN
  150. ’−−−−−−−−−−−−−−−−−− HUSK BOLD
  151. @HUSK_BOLD
  152.  FOR N=ST TO ED
  153.   FOR I=0 TO 7
  154.    IF I>6 THEN J=7 ELSE J=I+1
  155.    X=B(N,I)
  156.    Y=X OR FLOOR(X/2)
  157.    Y=Y OR FLOOR(X/4)
  158.    B(N,I)=Y AND NOT(B(N,J))
  159.   NEXT
  160.  NEXT
  161.  RETURN

CHECKER FLAG (ひとことコメント)

この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)

  • 投稿者 : スクリーンショット汚くってごめんなさい。かなりボケボケになってしまいましたね。 (2012/05/22 (火) 18:18:32)
  • hatena : QRコードの表を整理しました。 (2012/09/07 (金) 20:47:16)

表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.034 秒 | このページの最終更新 : 2013/03/19 (火) 15:09:22 (2698d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30